假设这样的结构:
class Interface
{
public:
template <typename T>
virtual void reportOperationError(T code , std::string message) = 0;
};
我不明白这个东西的用例,在这种情况下它有用,怎么样?
万一你想知道,我没有在任何地方看过这个代码,只是想了解这是否有一些特别的用途
答案 0 :(得分:6)
模板化成员函数不能是虚拟的......函数的每个实例化都会向虚拟表中添加另一个条目,编译器必须遍历所有代码才能创建vtable。因此,无论它是否有用,它都不是合法的C ++。
答案 1 :(得分:3)
这在C ++中不合法 。成员函数模板不能虚拟,因为VTable的大小将取决于其他翻译单元中的实例化,这将使其非常 非常 编译器实现者。
这会破坏C ++编译模型的全部意义,即单独编译。 C ++翻译单元(AKA源文件)必须能够自我编译。如果允许成员函数tamplates,这几乎是不可能的
答案 2 :(得分:0)
无法将虚拟成员函数设为模板。无论其潜在效用如何,此代码都不会编译。