gpt4 book ai didi

c++ - 非虚拟成员函数可以使用模板参数吗?

转载 作者:行者123 更新时间:2023-11-28 01:32:14 25 4
gpt4 key购买 nike

我一直在想,非虚拟成员函数可以使用模板参数吗? IOW,使用模板参数的函数应该是虚拟的吗?

例子:

template<int N>
class SomeClass
{
public:
SomeClass() {}

// Can this function be non-virtual?
int getValue() {
return N;
}

}

如果我没理解错的话,编译器基本上会为每个模板参数生成一个类。在上面的示例中,将有多个类(一个对应 N 的每个值)隐式生成,派生自 SomeClass。因此,根据我的理解,getValue() 需要根据实际(运行时)类型动态分派(dispatch)(到函数的不同实例)。

我知道编译器不会强制这些函数为虚函数,但它可以做一些魔术吗?或者我真的必须将函数设为虚函数才能通过例如调用正确的实例吗?指针?

最佳答案

Hence, in my understanding, getValue() would need to be dispatched dynamically (to different instances of the function) depending on the actual (runtime) type.

在对象声明中编码的类型:

SomeClass<0> s;
s.getValue();

编译器将调度到 SomeClass<0>::getValue .它不必在运行时分派(dispatch),它对类型系统都是静态可用的。一旦类模板被实例化以创建一个,它就像任何其他类一样。如果你要写:

SomeOtherClass c; // Not a template
s.doSomething();

编译器知道它应该分派(dispatch)给 SomeOtherClass::doSomething一样。

关于c++ - 非虚拟成员函数可以使用模板参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51021512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com