特定模板类型的函数模板专门化

时间:2016-12-28 09:21:29

标签: c++ templates

我正在尝试为特定类型的所有模板化值专门化模板函数。我有以下功能:

template <class T>
std::string toString(const T& t);

以下将允许我专门设置Float的Vector2函数:

template <>
std::string toString<Vector2<float>>(const Vector2<float>& v);

但我想要一个专门用于所有类型的Vector2的函数。我尝试过这样的事情:

template <class T>
std::string toString(const Vector2<T>& v);

但是在调用toString()函数时如此:

Vector2<float> vec;
toString(vec);

调用第一个函数。我怎样才能做到这一点?

编辑:

我可能遗漏了一个重要的细节,我实际上是这样调用函数:

toString<Vector2<float>>(vec) 

我不认为它有所作为,但显然确实如此,因为当我在没有

的情况下调用它时
<Vector2<float>>

它工作正常。为什么这会导致调用不需要的函数?很抱歉浪费你的时间并感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

嗯,在您的情况下,可以使用称为重载的替代技术。

public static IEnumerable<T> Except<T, TKey>(this IEnumerable<T> items, IEnumerable<T> other,                                                                           Func<T, TKey> getKey)
{
    return from item in items
            join otherItem in other on getKey(item)
            equals getKey(otherItem) into tempItems
            from temp in tempItems.DefaultIfEmpty()
            where ReferenceEquals(null, temp) || temp.Equals(default(T))
            select item;

}

证明正在调用正确的函数:http://ideone.com/pR2Dyn