我必须为一个模板类实现一个非成员函数isHomogenous(三元组),其定义如下:
template <typename T1, typename T2, typename T3>
    class Triple
{
public:
    Triple()
    { }
    Triple(const T1 &a, const T2 &b, const T3 &c) : a(a), b(b), c(c)
    { }
...isHomogenous函数应返回一个布尔值,指示参数三元组中的所有三个值是否都属于同一类型。我试过了:
template <typename T> bool isHomogenous(Triple<T, T, T> triple) {
    return true;
}
template <typename T1, typename T2, typename T3> bool isHomogenous(Triple<T1, T2, T3> triple) {
    return false;
}这不管用,你能提示我一个解决方案吗?
发布于 2012-10-15 18:15:28
您不能专门化模板函数,当您添加专门化时,专门化函数实际上被添加到重载集中,因此它与重载相同,并使用重载解析规则来选择调用哪个函数。
如果你真的想专门化一个模板函数,委托给一个具有静态成员的结构或类,然后专门化模板结构:
template <typename T>
struct handler
{
   static void perform(T& );
};
template <>
struct handler<int>
{
   static void perform(int) { doStuff(); }
};下面是全局函数(您希望对其进行专门化):
template <typename T>
void function (T& v)
{
   handler<T>::perform(v);
}希望这能有所帮助。
https://stackoverflow.com/questions/12893411
复制相似问题