class A {
public:
template<typename T> void func(size_t n, T values[]) { ... }
};
class B : public A {
public:
void func(size_t n, uint32_t values[]) { ... }
};为什么函数B::func() 而不是在调用此代码时优先于函数模板A::func()?
uint32_t values[5];
A* obj = new B();
obj->func(5, values);发布于 2011-01-01 20:08:10
有两个原因-
发布于 2011-01-01 20:05:04
如果您对类型为A的对象/指针/引用调用A,则会调用A::func,因为func不是虚拟的(而不是:它是一个模板函数)。
你真的测试了你的代码吗?
发布于 2011-01-01 20:04:37
A::func()没有声明为virtual,所以编译器不会生成在运行时调用B::func()所需的虚拟表和任何其他代码。它与模板无关。
https://stackoverflow.com/questions/4575491
复制相似问题