CppCoreGuidelines T.83 不要声明成员函数为模板虚函数
05 October 2023
“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 };
注意
我们需要此规则,是因为很多人总是在提问。
其他方案
双重分派,访问者模式,计算调用了哪个函数。
强化
编译器会处理。