特定模板类型的功能模板专业化
问题描述:
我正在尝试为特定类型的所有模板化值专门化模板函数。我有以下功能:特定模板类型的功能模板专业化
template <class T>
std::string toString(const T& t);
下面将让我专注的功能花车的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)
我不认为这有差别,但显然它确实如此,因为当我打电话给它时,它没有任何问题。为什么这会导致不需要的功能被调用?对不起,浪费你的时间,并感谢你的帮助。
答
那么,在你的情况下,有可能使用替代技术称为重载。
template <typename T>
std::string toString(const Vector2<T>& vec)
{
//function body
}
证明,适当的函数被调用:http://ideone.com/pR2Dyn
[无法重现](http://coliru.stacked-crooked.com/a/7368da00a62395b2)。注意:你重载'toString',而不是专门化 - 这是正确的方法。这应该工作。 – Quentin
@Quentin我怀疑他想部分专门化一个功能。正如你所知道的那样,这是不可能的,并且因为实际的超载而出现意外的行为。需要澄清。 – skypjack
发现问题,更新问题... –