Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
wna
0 / 0 / 0
Регистрация: 05.05.2016
Сообщений: 16
1

Указатель метода класса в другом методе этого класса

06.10.2017, 16:58. Просмотров 123. Ответов 4
Метки нет (Все метки)

Здравствуйте.
Как можно передать в методе класса указатель на другой метод этого же класса.
Задача сделать вот что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class A
{
    
    void func1()
    {
        
    }
 
    void func2()
    {
        std::function<void()> f= func1;
    }
};
Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2017, 16:58
Ответы с готовыми решениями:

Ошибка при вызове метода класса в методе другого класса
Господа программисты, возникла такая проблема. При вызове метода класса в...

Создание объекта класса в методе этого же класса
собственно вопрос. можно ли создавать объект класса в методе того же класса?...

Статический указатель класса на объект этого же класса
Не пойму: что в этом коде не так? #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО!
Друзья! Почему так? #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace...

Значения из одного класса в другом(через указатель)
Здравствуйте, это снова я Ошибка в 63 строчке, как туда указать 2 параметра?...

4
netBool
238 / 241 / 148
Регистрация: 16.11.2010
Сообщений: 922
Записей в блоге: 9
Завершенные тесты: 5
06.10.2017, 17:19 2
C++
1
2
3
void (*pointfunc)();      //Объявляем указатель на функцию с соответствующей сигнатурой
pointfunc = func1;        //инициализируем
(*pointfunc)();       //вызываем
1
COKPOWEHEU
1001 / 696 / 159
Регистрация: 09.09.2017
Сообщений: 3,022
06.10.2017, 17:22 3
только она должна быть static
1
Mirmik
techpriest
623 / 204 / 55
Регистрация: 27.02.2014
Сообщений: 1,078
06.10.2017, 18:05 4
Пример работы с указателем на метод класса. Здесь объявление синонима типа, взятие указателя и его вызов.
С остальным проблем возникнуть не должно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//g++  5.4.0
 
#include <iostream>
 
class A
{ 
    using mtd_t = void (A::*)();
    
    void func1() {
        std::cout << "HelloWorld" << std::endl;
    }
    
public: 
    void func2() {
        mtd_t mptr = &A::func1;
        (this->*mptr)();
    }
};
 
int main()
{
    A().func2();
}
1
DU3
281 / 233 / 115
Регистрация: 07.09.2016
Сообщений: 587
06.10.2017, 18:13 5
ну можно с запаковкой 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <string>
#include <iostream>
#include <functional>
 
class A
{
  std::string name;
 
  void func1()
  {
    std::cout << name << ": this is func1" << std::endl;
  }
 
public:
  A(const std::string& n)
    : name(n)
  {
  }
 
  void func2()
  {
    std::function<void(A*)> f1_1(&A::func1);
    f1_1(this);
 
    auto f1_2 = &A::func1;
    (this->*f1_2)();
 
    //typedef void (A::*MethodPtr)();
    using MethodPtr = void (A::*)();
    MethodPtr f1_3 = &A::func1;
    (this->*f1_3)();
 
    std::function<void()> f2_1(std::bind(&A::func1, this));
    f2_1();
 
    std::function<void()> f2_2 = [this]() { func1(); };
    f2_2();
  }
};
 
 
int main()
{
  A a1("a1");
  a1.func2();
  A a2("a2");
  a2.func2();
}
0
06.10.2017, 18:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.10.2017, 18:13

Использование метода из одного класса в другом
Здравствуйте! Проходим классы, все никак не могу понять, как использовать метод...

Указатель на функцию-член одного класса в другом классе - C++
Добрый вечер! Может кто-то может помочь с проблемой. class Cook {...

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


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

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

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