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



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

所以你有一个类看起来像这个

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编译的函数的属性。

有没有什么方法可以做到这一点,或者写一些有这种效果的小东西?

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

我不确定你想要的是什么,但一个常见的模式是所谓的奇怪的重复模板模式;在这里,基类本身就是模板,而不是它的成员函数。换句话说:

template <typename T>
class A 
{ 
    virtual void vtfunc(void) 
};
class B : public A<B>
{
    …
};

请考虑使用非成员函数。

最新更新