Как сохранить указатель функции на публичную функцию полученного класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как сохранить указатель функции на публичную функцию полученного класса?

Сообщение Anonymous »

У меня есть базовый класс с несколькими методами идентичной подписи и несколькими полученными классами. Логика программы выбирает, какой класс для использования, какой метод использовать и никогда не изменяет эти решения позже. Simple if или switch оператор и используйте его как defived-> methodxx () . Тем не менее, я хотел бы упростить использование и удалить указанные, если s или Switch с помощью хранимого указателя на конкретный метод. Это кажется правдоподобным, но я не могу понять это точно.

Код: Выделить всё

#include 
#include 

using namespace std;

class Base {
public:
virtual void method01() = 0;
virtual void method02() = 0;
};

class Derived01 : public Base {
public:
void method01() final { std::cout (); // init. said pointer with a particular derivative
derived->method01();      // works fine, prints "001\n"
void (Base::*func)();     // "func" is a pointer to a "void Base::...()" function
func = &Base::method02;   // init. "func" with a pointer to a particular function from Base
(derived.get()->*func)(); // not exactly sure why this works and prints "002\n"
return 0;
}
Тем не менее, я не понимаю, как (и/или почему) точно работает последняя строка, и если это возможно через любой C ++ или просто C Magic, чтобы преобразовать эту мерзость - (defived.get () ->*func) - в более простой призыв JustMethod () .

Подробнее здесь: https://stackoverflow.com/questions/797 ... ived-class
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»