【发布时间】:2011-01-01 19:54:52
【问题描述】:
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);
【问题讨论】:
-
因为重载解析规则选择最相等的类型匹配和最具体的匹配(在本例中为非模板匹配)。
-
Herb Sutter 的一些建议gotw.ca/gotw/049.htm
-
不是作者的意图吗?
-
@peoro:是的,我想。在我错过了“不”之后,我重新措辞并发表了严厉的评论,解释说“不”缺少......
标签: c++ templates class derived