2016-12-28 132 views
-2

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

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) 

我不认为这有差别,但显然它确实如此,因为当我打电话给它时,它没有任何问题。为什么这会导致不需要的功能被调用?对不起,浪费你的时间,并感谢你的帮助。

+2

[无法重现](http://coliru.stacked-crooked.com/a/7368da00a62395b2)。注意:你重载'toString',而不是专门化 - 这是正确的方法。这应该工作。 – Quentin

+1

@Quentin我怀疑他想部分专门化一个功能。正如你所知道的那样,这是不可能的,并且因为实际的超载而出现意外的行为。需要澄清。 – skypjack

+0

发现问题,更新问题... –

回答

0

那么,在你的情况下,有可能使用替代技术称为重载。

template <typename T> 
std::string toString(const Vector2<T>& vec) 
{ 
    //function body 
} 

证明,适当的函数被调用:http://ideone.com/pR2Dyn

+0

这是OP已经在做的事情。 – Quentin

+0

@Quentin他提到错误的函数被调用,但这是不可能的;)http://ideone.com/pR2Dyn – paweldac

+1

[确实](http://stackoverflow.com/questions/41358958/function-template-specialization-换一个特定的模板化型/ 41359040?noredirect = 1个#comment69919451_41358958)。但在问题得到澄清之前,重复部分“有问题”的代码根本无济于事。 – Quentin