c++ 为什么不允许虚拟模板函数

问题描述 投票:0回答:1

在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;
}
c++ language-lawyer vtable c++-templates
1个回答
0
投票

还是故意强制执行的

是的。

[temp.mem]/3

不得声明成员函数模板

virtual

© www.soinside.com 2019 - 2024. All rights reserved.