2011-06-06 114 views
1

我想知道是否有可能是任何方式写在抽象类的模板功能,并将它(模板函数)自动派生类的类型实例?抽象类通过模板化的虚函数访问已实现的类型?

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

class A 
{ 
    virtual template < typename T> 
    void vtfunc(void) 
}; 
class B : public A 
{ 
    /// No declared members pertaining to this example 
} 

然后,每当从A派生的类被声明,它编译“vtfunc”本身作为模板参数T. 然后,调用vtfunc ()通过A的接口调用该函数编译其派生类B.

的isntance是否有这样做,或者写东西fiddley有这种效果的方法吗?

显然我知道模板参数可能只影响类的内部,而不是返回类型和参数 - 他们将需要是因为这样的多态性的作品一样。

回答

2

我不知道你在做什么之后,但一个共同的模式是所谓的curiously recurring template pattern;在这里,基类本身就是模板,而不是它的成员函数。换句话说:

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

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

为真正的多态性添加另一个超类'A'。 :) – Xeo 2011-06-06 16:22:36

+0

Woop!真棒回答谢谢,我并没有真的认为这是可能的。尽管Xeo说,我需要在A之上再创建一个类,所以这个多态性实际上可以被使用。 – deek0146 2011-06-06 16:32:26

1

请考虑使用非成员函数。