05 October 2023

C++ 核心指南目录

“Do not declare a member function template virtual”

理由

C++ 不支持这种用法。如果支持,也无法生成 vtbls ,直到链接时间才可以生成。一般来说,实现方式必须处理动态链接。

错误例子

class Shape {
    // ...
    template<class T>
    virtual bool intersect(T* p);   // error: template cannot be virtual
};

注意

我们需要此规则,是因为很多人总是在提问。

其他方案

双重分派,访问者模式,计算调用了哪个函数。

强化

编译器会处理。