这个功能模板是否专用?

时间:2015-11-27 12:06:12

标签: c++

考虑:

template<class Y>
struct Foo
{
    void bar(std::vector<Y>);

    template <class T>
    void bar(std::vector<T>);
};

两个成员函数之间有什么关系?一个是另一个的特殊形式吗?我不愿意这么说,因为第一个已经在Foo类型实例上“专门化”。

如果TY相同,会发生什么?

2 个答案:

答案 0 :(得分:3)

bar只是您示例中的重载函数。如果YT相同,那么重载决策将选择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