имеет ли смысл метод виртуального шаблона? - PullRequest
5 голосов
/ 10 июля 2011

Предположим такую ​​конструкцию:

class Interface
{
public:
   template <typename T>
   virtual void reportOperationError(T code , std::string message) = 0;
};

Я не понимаю вариант использования этой вещи, в каком случае она полезна и как?

Если вам интересноЯ нигде не видел этот код, просто хочу понять, может ли это иметь какое-то конкретное применение

Ответы [ 3 ]

6 голосов
/ 10 июля 2011

Шаблонные функции-члены не могут быть виртуальными ... Каждое создание функции добавляет новую запись в виртуальную таблицу, и компилятор должен будет просмотреть весь код для создания виртуальной таблицы.Поэтому, независимо от того, полезно это или нет, это просто не разрешено C ++.

3 голосов
/ 10 июля 2011

Это недопустимо в C ++ .Шаблоны функций-членов не могут быть виртуальными , потому что размер VTable будет зависеть от экземпляров в других единицах перевода, что сделает его очень очень трудным для разработчиков компиляторов.

Это разрушило бы весь смысл модели компиляции C ++, то есть отдельную компиляцию.Модуль перевода C ++ (исходный файл AKA) должен быть самодостаточным для компиляции.Если разрешены шаблоны-члены-функции, это становится почти невозможным

0 голосов
/ 10 июля 2011

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

...