虚拟模板方法有意义吗?

时间:2011-07-10 15:13:58

标签: c++ abstract-class virtual-method

假设这样的结构:

class Interface
{
public:
   template <typename T>
   virtual void reportOperationError(T code , std::string message) = 0;
};

我不明白这个东西的用例,在这种情况下它有用,怎么样?

万一你想知道,我没有在任何地方看过这个代码,只是想了解这是否有一些特别的用途

3 个答案:

答案 0 :(得分:6)

模板化成员函数不能是虚拟的......函数的每个实例化都会向虚拟表中添加另一个条目,编译器必须遍历所有代码才能创建vtable。因此,无论它是否有用,它都不是合法的C ++。

答案 1 :(得分:3)

这在C ++中不合法 。成员函数模板不能虚拟,因为VTable的大小将取决于其他翻译单元中的实例化,这将使其非常 非常 编译器实现者。

这会破坏C ++编译模型的全部意义,即单独编译。 C ++翻译单元(AKA源文件)必须能够自我编译。如果允许成员函数tamplates,这几乎是不可能的

答案 2 :(得分:0)

无法将虚拟成员函数设为模板。无论其潜在效用如何,此代码都不会编译。