在c++中,无法创建虚拟模板函数。据我了解,原因是,我们无法使用具有无限数量的匹配函数的虚拟表创建基类。我想澄清的是,这是否是当前c++编译器的限制?或者是为了避免其他一些问题而故意强制执行的规则?
当我尝试在代码中使用虚拟模板函数时,编译器会抛出错误。 “错误:模板可能不是‘虚拟’”
附注示例代码
class A {
public:
template <typename T>
virtual void doStuff(T value) const {
cout << "A:doStuff " << value << endl;
}
virtual ~A() {}
};
class B : public A {
public:
template <typename T>
void doStuff(T value) const override {
cout << "B:doStuff " << value << endl;
}
};
int main() {
A* a1 = new B();
a1->doStuff(1);
A* a2 = new B();
a2->doStuff(1.1);
delete a1;
delete a2;
return 0;
}