Указатель на функцию-член класса шаблона - PullRequest
3 голосов
/ 28 сентября 2008

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

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

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

Мой вариант использования: я хочу сохранить в удерживающем классе вектор указателей на функцию «DoSomething», чтобы я мог вызывать все сохраненные классы из одного места.

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

Ответы [ 2 ]

12 голосов
/ 28 сентября 2008

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

Примерно так:

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 голосов
/ 28 сентября 2008

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

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

...