Указатель функции на функции-члены класса шаблона
Вопрос
У меня есть шаблонный класс, определенный (частично) как
template <class T> MyClass
{
public:
void DoSomething(){}
};
Если я хочу вызвать DoSomething из другого класса, но иметь возможность сделать это для нескольких типов «T» в одном и том же месте, я застрял в идее, поскольку указатели функций метода однозначно ограничены типом класса.Конечно, каждый MyClass имеет свой тип, поэтому я не могу хранить указатели на функции MyClassDoSomething() «полиморфным» способом.
Мой вариант использования: я хочу сохранить в классе хранения вектор указателей функций на «DoSomething», чтобы я мог выполнить вызов всех сохраненных классов из одного места.
Есть ли у кого-нибудь предложения?
Решение
Итак, решение-функтор не работает так, как вам нужно.Возможно, вам следует наследовать класс шаблона от общего базового класса «Интерфейс».И затем вы используете их вектор.
Что-то вроде этого:
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>);
Другие советы
Знаешь, это как раз то, что мне нужно было сделать.Как ни странно, на раннем этапе я не принял это решение как решение, подходящее для моего варианта использования, по причинам, которые теперь от меня ускользают.Я думаю, что меня ослепили некоторые метапрограммные вещи, которые я делаю в том же месте для диспетчеризации во время компиляции (т. е.сбивающее с толку время компиляции и время выполнения в моем запутавшемся мозгу).
Спасибо за толчок!