Как-то раньше я был уверен, что вы не можете этого сделать, но на днях я играл с некоторым кодом, и он, казалось, собирался и работал. Я просто хочу проверить, что мне не просто повезло. Может ли класс шаблона иметь чистую виртуальную функцию, которая, как я полагаю, также означает, что справедливые виртуальные методы также будут действительны для деструктора?Разрешены ли чистые виртуальные методы внутри класса шаблона?
template <typename WordType> class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
Я пытался его поиск в Интернете, и все, что я был в состоянии найти то, что вы не можете иметь виртуальный метод (чистый или иным образом) в обычном классе, например, как это:
class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
template <typename WordType>
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
И что это связано с невозможностью управления виртуальной таблицей, чтобы ссылаться на все типы типов возможных типов, с которыми этот метод будет связан.
Однако, когда дело доходит до виртуальной функции-члена класса шаблона, это кажется другим, потому что весь класс сам «создается» через параметр шаблона, когда изменена переменная класса шаблона. На данный момент виртуальный метод подобен любому другому вируальному методу класса из-за «поиска и замены» шаблонов.
В любом случае, задавая вопрос еще раз, если он заблудился там: Виртуальные (чистые и/или нормальные) виртуальные функции разрешены в классе tempate?
Это звучит, как вы уже поняли, ответ на этот вопрос ... –
Как я уже сказал, я клянусь себе, что я пытался это раньше, и были проблемы. Когда это внезапно сработало, я хотел убедиться, что это было не просто потому, что я был на другом компиляторе, разных флажках предупреждения/ошибки и т. Д., И что он был определен - предпочтительно - что это было стандартно. – Anthony
Кроме того, для чего это стоило, я не мог найти ничего онлайн, который окончательно сказал так или иначе. Какое лучшее место для размещения этой информации, чем SO? – Anthony