考虑:
template<class Y>
struct Foo
{
void bar(std::vector<Y>);
template <class T>
void bar(std::vector<T>);
};
两个成员函数之间有什么关系?一个是另一个的特殊形式吗?我不愿意这么说,因为第一个已经在Foo
类型实例上“专门化”。
如果T
和Y
相同,会发生什么?
答案 0 :(得分:3)
bar
只是您示例中的重载函数。如果Y
和T
相同,那么重载决策将选择void bar(std::vector<Y>)
,因为它不是函数模板。
答案 1 :(得分:-1)
foo<int> fi;
vector<int> vi;
vector<float> vf;
fi.bar(vi); // overload #1 gets chosen (more specialized for T=int)
fi.bar(vf); // overload #2 gets chosen