Чисто виртуальные шаблонные функции в шаблонном классе

Поэтому мой инструктор раздал некоторый код, который, я считаю, не работает вообще, и я хочу получить некоторые разъяснения по нему. Он использовал это в своих заметках (это подразумевает, что это правильно).

template<class T>
class State
{
public:
    virtual void Enter(T*)=0;
    virtual void Execute(T*)=0;
    virtual void Exit(T*)=0;
    virtual ~State(){};
};

Я могу видеть, что он пытается сделать, но я верю, что компилятору это совсем не понравится. Может кто-нибудь помочь объяснить, почему это работает или не работает.

1 ответ

Это должно работать, поскольку ни одна из функций-членов не является функциями-членами шаблона. Аргументы базового класса могут быть выведены во время компиляции, а фактическая функция для вызова все еще может быть определена во время выполнения.

Если у вас было это:

class Foo
{
    template< typename T > virtual void Bar( T * ) = 0;
};

У вас могут возникнуть проблемы, поскольку нет способа генерировать функции для обработки всех потенциальных типов, которые могут быть переданы в эту функцию во время компиляции.

Другие вопросы по тегам