У меня есть базовый класс с несколькими методами идентичной подписи и несколькими полученными классами. Логика программы выбирает, какой класс для использования, какой метод использовать и никогда не изменяет эти решения позже. 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) - в более простой призы>
Подробнее здесь:
https://stackoverflow.com/questions/797 ... ived-class