我想知道是否有任何方法可以在抽象类中编写模板函数,并让它(模板函数)自动使用派生类的类型进行实例化?
所以你有一个看起来像这样的课程
class A
{
virtual template < typename T>
void vtfunc(void)
};
class B : public A
{
/// No declared members pertaining to this example
}
然后,每当声明从A派生的类时,它将自身编译为“vtfunc”作为模板参数T. 然后,通过A的接口调用vtfunc()调用为其派生类B编译的该函数的isntance。
有没有办法做这个,或写一些有效果的fiddley?
显然我知道模板参数只会影响类的内部,而不会影响返回类型和参数 - 由于多态的工作方式,它们需要相同。
答案 0 :(得分:2)
我不确定你追求的是什么,但一种常见的模式是所谓的curiously recurring template pattern;这里,基类本身就是模板,而不是它的成员函数。换句话说:
template <typename T>
class A
{
virtual void vtfunc(void)
};
class B : public A<B>
{
…
};
答案 1 :(得分:1)
请考虑使用非成员函数。