Я использую шаблон в своей программе, который вызывает вызов различных видов функторов в зависимости от типа объекта. В приведенном ниже коде объект b1
явно создается с производным функтором типа FunctorX
. Но когда я делаю вызов в коде, базовый функтор вызывается вместо производного функтора. Почему это?Производный функтор, не вызываемый при передаче в качестве параметра шаблона
struct Functor
{
Functor() {}
~Functor() {}
virtual int operator()() { return 33; }
};
struct FunctorX : public Functor
{
FunctorX() : Functor() {}
~FunctorX() {}
int operator()() { return 44; }
};
template< typename FunctorT >
struct B
{
B(FunctorT FunctorArg) : Functor { FunctorArg } {}
~B() {}
FunctorT Functor;
};
int main()
{
B<Functor> b1 { FunctorX() }; // initialize with derived functor. Derived functor gets instantiated.
int num = b1.Functor(); // error: calls base functor, not derived functor
return 0;
}
@Barry меняет функтор члена B на ptr, позволяет мне делать 'B < Functor > b1 {new FunctorX()};' и исправлять нарезку. Но как бы тогда был вызов на «b1»? Я продолжаю получать 'error C2064: термин не вычисляет функцию, принимающую 0 аргументов, когда я вызываю' b1.Functor(); '. – rtischer8277
@Barry Я получил его: 'int num = (* b1.Functor)();' – rtischer8277