Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.70/10: Рейтинг темы: голосов - 10, средняя оценка - 4.70
kravam
быдлокодер
1709 / 896 / 105
Регистрация: 04.06.2008
Сообщений: 5,545
1

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель

09.06.2011, 22:15. Просмотров 1794. Ответов 1
Метки нет (Все метки)

Друзья! Всем привет. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
class otets {
 public:
  void f (void (otets::*p)());         
 private:
  void echo_f (){};            
};
 
 
void otets::f (void (otets::*p)()) {}         
 
int main () {}
Компилится, а вот так вот:
C++
1
void otets::f (void (otets::*p)()) {p();}
Не компилится.
Код упрощён донельзя, так-то бы безо всяких указателей работал, если бы просто одну функцию из другой надо было вызвать. Спасибо, кто поможет!

Добавлено через 45 минут
А компилятор пишет: надо использовать .* или ->* для вызова; это я понимаю, функция метод вызывается не сама по себе, а как член класса, но как воплотить это в жизнь- ума не приложу.

Добавлено через 22 минуты
Типа я нашёл ответ, как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class otets {
 public:
  void f (void (otets::*p)(), otets& );         
 public:
  void echo_f (){};            
};
 
 
void otets::f (void (otets::*p)(), otets& ot ) {(ot.*p)();}         
int main () {
 void (otets::*p)()= &otets::echo_f;
 otets ot_;
 ot_.f(p, ot_);
}
Основное: мало аргументами передавать указатель на функцию, надо ещё передавать и объект. Такие дела.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2011, 22:15
Ответы с готовыми решениями:

Как передать указатель на функцию через метод класса ?
typedef void (*FuncCallback)(float* flValue); Пробовал по всякому и ни как:...

Функция, получающая указатель на обычную функцию, получает указатель на метод класса
Здравтсвуйте. Имеется вопрос по указателям на методы класса. Допустим, есть...

Вызвать метод через указатель на метод
class MenuItem { public: MenuItem(string name, MenuItem *parent = nullptr,...

Как вызвать функцию через указатель?
Добрый день. Всех с наступающим))Здоровье Счастье и бабок))) Подскажите как...

Не могу вызвать функцию через указатель
Есть функция void matrixsqr(int **a, int N, int M) как ее вызвать через...

1
silent_1991
Эксперт С++
5010 / 3070 / 270
Регистрация: 11.11.2009
Сообщений: 7,044
Завершенные тесты: 1
09.06.2011, 22:43 2
Объект можно не передавать, в методе в любом случае есть указатель на объект (если метод не статический), this то бишь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
class Foo
{
public:
    void f1()
    {
        std::cout << "Call f1()" << std::endl;
 
        f2(&Foo::f3);
    }
 
    void f2(void (Foo::*func)())
    {
        std::cout << "Call f2()" << std::endl;
 
        (this->*func)();
    }
 
    void f3()
    {
        std::cout << "Call f3()" << std::endl;
    }
};
 
int main()
{
    Foo bar1;
 
    bar1.f1();
 
    return 0;
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2011, 22:43

Как вызвать функцию через указатель?
Привет всем! Помогите пожалуйста! Есть готовая рабочая программа, надо вызвать...

Возможно ли вызвать метод наследника через указатель на базовый класс
Возможно ли вызвать метод наследника,через указатель на базовый класс, если он...

Передать в неуправляемую функцию указатель на указатель
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru