Ожидаемый этот код, чтобы скомпилировать и работатьшаблона специализации чистого виртуального метода
template<class T>
class Base
{
virtual void method() = 0;
};
template<>
void Base<int>::method() { std::cout << "overrided" << std::endl; }
Base<int> base;
Но это дает ошибку 'Base<int>': cannot instantiate abstract class
. Частичная специализация, вызванная мыслью, сделает Base<int>
не абстрактной и позволит ее создать.
Есть ли рабочее решение, такое же короткое, как этот, и что сохраняет абстракцию класса Base
? В противном случае я могу сделать неабстрактный Base
класса или не использовать решение Никола бола от сюда: Template specialization and inheritance
Даже для обычного абстрактного класса вы можете иметь определение для чистой виртуальной функции. Но это не делает его менее абстрактным. Вы все равно не сможете создать экземпляр. – Arunmu
@Arunmu Ответ лучше сформулирован как ответ, а не комментарий? –
@AlanStokes Я согласен с вами, но я не думаю, что ответил на этот вопрос с этим комментарием. – Arunmu