вызов функции шаблона производного класса

У меня проблема в C ++ с вызовом функции производного класса при наличии указателя на базовый класс.

]РЕДАКТИРОВАТЬ: Некоторые ответы отсылали меня к CRTP

, но я хочу сказать, что мне нужен указатель на класс «Base *», а не на «Base *», потому что я не знаю, какой тип обрабатывается в настоящее время (текущий экземпляр создается на основе какой-то фабрики).

Классы:

class Base 
{
..
template
func (T arg) { ... };
};

class Derived1 : public Base
{
...
template
func (T arg) { ... };
};


class Derived1 : public Base
{
...
template
func (T arg) { ... };
};

Использование:

int main()
{
   Base* BasePtr = new Derived1();

   // The expected function to be called is Derived1::func()
   BasePtr->func();

   return 0; // :)
}

Я не могу сделать func виртуальным, потому что язык не поддерживает функцию виртуального шаблона.

Это разрешено, только если только у класса есть аргументы шаблона, но нет, если у функции внутри него есть аргументы шаблона.

Я видел аналогичную проблему, решенную в Boost.Serialization, но не мог понять решение.

Спасибо,

Коби Меир

5
задан Alderath 27 November 2018 в 09:15
поделиться