У меня проблема в 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, но не мог понять решение.
Спасибо,
Коби Меир