2008-09-28 3 views
3

у меня есть шаблонный класс, определенный (в части), какфункции на функции-члены класса шаблона

template <class T> MyClass 
{ 
public: 
    void DoSomething(){} 
}; 

Если я хочу вызвать DoSomething из другого класса, но быть в состоянии сделать это для нескольких типов «T» в том же месте, я застреваю для идеи, поскольку указатели функций метода однозначно ограничены типом класса. Конечно, каждый MyClass - это другой тип, поэтому я не могу хранить указатели на объекты в MyClassDoSomething() в «полиморфном» виде.

My use-case Я хочу сохранить в классе удержания вектор указателей функций на «DoSomething», чтобы я мог вызывать вызов всех сохраненных классов из одного места.

Есть ли у кого-нибудь предложения?

ответ

12

Хорошо, поэтому решение functor не работает так, как вам нужно. Возможно, вы должны наследовать свой класс шаблонов из общего класса «Интерфейс». И затем вы используете вектор из них.

Что-то вроде этого:

class Base { 
public: 
    virtual ~Base(){} 
    virtual void DoSomething() = 0; 
} 

template <class T> class MyClass : public Base { 
public: 
    void DoSomething(){} 
}; 

std::vector<Base *> objects; 
objects.push_back(new MyClass<int>); 
objects.push_back(new MyClass<char>); 
0

Вы знаете, что это как раз то, что мне нужно делать. В Bizzarly я отказался от него в качестве решения, действующего для моего использования на ранней стадии, по причинам, которые теперь меня избегают. Я думаю, что я был ослеплен некоторыми метапрограммирующими вещами, которые я делаю в одном и том же месте для отправки времени компиляции (т. Е. Путают время компиляции и время выполнения в моем мозгу, который был усыпан).

Спасибо за толчки!

Смежные вопросы