我正在尝试为特定类型的所有模板化值专门化模板函数。我有以下功能:
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>>
它工作正常。为什么这会导致调用不需要的函数?很抱歉浪费你的时间并感谢你的帮助。
答案 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