Указатель функции на функции-члены класса шаблона

StackOverflow https://stackoverflow.com/questions/146275

Вопрос

У меня есть шаблонный класс, определенный (частично) как

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>);

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top