Мне нужно создавать экземпляры различных объектов в массиве и вызывать их методы execute в зависимости от данных, которые я получаю из сокета.Я хотел бы избежать использования switch и if в этом случае.
Код работает отлично, пока я не работаю с шаблонами.Когда я работаю с шаблонами, он не компилируется.
Проблема в том, что я не могу найти обходной путь для этого typedef, поскольку его нельзя использовать с шаблонами.Я видел некоторые посты здесь и т. Д., Но до сих пор не нашел ничего полезного.
Я вставляю базовый тестовый код для класса, с которым у меня проблемы, и основной.Остальная часть кода не будет мешать.
class Command {
public:
template<class T>
typedef void (T::*Action)();
Command( T* object, Action method ) {
m_object = object;
m_method = method;
}
void execute() {
(m_object->*m_method)();
}
private:
T* m_object;
Action m_method;
};
int main( void ) {
Queue<Command> que;
Command* input[] = { new Command( new test, &test::m1),
new Command( new test, &test::m2),
new Command( new test, &test::m3)};
for (int i=0; i < 3; i++)
que.enque( input[i] );
for (int i=0; i < 3; i++)
que.deque()->execute();
cout << '\n';
}