2016-12-28 11 views
-2

特定の型のすべてのテンプレート化された値に対してテンプレート関数を特殊化しようとしています。以下は私が山車のベクトル2のために機能を特化することができます特定のテンプレート型の関数テンプレートの特殊化

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

:私は、次の機能を持っている

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

が、私はベクトル2のすべてのタイプに特化する機能をしたいと思います。そのよう

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

が、のtoString()を呼び出す機能::私はこのような何かを試してみました

Vector2<float> vec; 
toString(vec); 

最初の関数が呼び出されます。どうすればこれを達成できますか?


EDIT:

私は重要なディテールを残したかもしれない、私は実際にそうように関数を呼び出しました:

toString<Vector2<float>>(vec) 

私はそれが違いを作ったと思いますが、明らかにしませんでした私がそれを使わないで電話すると

<Vector2<float>> 

がうまくいったからです。なぜこれが望ましくない機能を呼び出すのでしょうか?あなたの時間を無駄にして、ご協力いただきありがとうございます。

+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- for-a-specific-templated-type/41359040?noredirect = 1#comment69919451_41358958)。しかし、問題が明確になるまで、「問題のある」コードの一部を繰り返すことはまったく役に立たないでしょう。 – Quentin

関連する問題