Можно ли переопределить чистые виртуальные функции в шаблонах? - PullRequest
0 голосов
/ 19 октября 2018

Я не знаю, возможно ли это вообще: допустим, у меня есть интерфейс, который определяет:

virtual void func()=0;

Возможно ли, что в конкретном классе я переопределяю его следующим образом:

template <std::size_t  number> 
void func(){ /* do something with number... */ }

Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

возможно, что в конкретном классе я переопределяю его следующим образом:

Нет, это не сработает.

Подумайте об этом случае.

struct Base
{
   virtual void func()=0;
};

struct Derived : Base
{
   template <std::size_t  number> 
   void func(){}
};

и

Base* b = new Derived;
b->func(); // Which of the Derived::func() should that resolve to at run time?
           // Derived::func<0>()?
           // Derived::func<10>()?
           // ...

Это вообще не имеет концептуального смысла.

0 голосов
/ 19 октября 2018

Нет.

Шаблоны функций никогда не переопределяют виртуальные функции, чистые или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...