抽象类通过模板化虚函数访问实现的类型?

时间:2011-06-06 16:13:10

标签: c++ templates polymorphism

我想知道是否有任何方法可以在抽象类中编写模板函数,并让它(模板函数)自动使用派生类的类型进行实例化?

所以你有一个看起来像这样的课程

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?

显然我知道模板参数只会影响类的内部,而不会影响返回类型和参数 - 由于多态的工作方式,它们需要相同。

2 个答案:

答案 0 :(得分:2)

我不确定你追求的是什么,但一种常见的模式是所谓的curiously recurring template pattern;这里,基类本身就是模板,而不是它的成员函数。换句话说:

template <typename T>
class A 
{ 
    virtual void vtfunc(void) 
};

class B : public A<B>
{
    …
};

答案 1 :(得分:1)

请考虑使用非成员函数。