【发布时间】:2018-06-25 10:39:08
【问题描述】:
我一直在想,非虚成员函数可以使用模板参数吗? IOW,使用模板参数的函数应该是虚拟的吗?
例子:
template<int N>
class SomeClass
{
public:
SomeClass() {}
// Can this function be non-virtual?
int getValue() {
return N;
}
}
如果我理解正确的话,编译器基本上会为每个模板参数value生成一个类。在上面的示例中,将有多个类(每个 N 值一个)从SomeClass 中隐式生成。因此,据我了解,getValue() 需要根据实际(运行时)类型动态地调度(到函数的不同实例)。
我知道编译器不会强制这些函数是虚拟的,但它可以做一些魔术吗或者我真的必须使函数虚拟才能通过例如调用正确的实例。指针?
【问题讨论】:
-
SomeClass的不同实例化与任何类型的继承无关。它们只是不同的类。
标签: c++ templates polymorphism