私は、メソッドのコンテキストでは特殊化に関する多くのSOの質問を見ましたが、クラスに属する関数ではありません。私はこれらの質問から渡された知識をここの問題に翻訳するのに苦労しています。クラスメソッドのテンプレートの特殊化。 "関数テンプレートは既に定義されています"
私は過去に習得したクラスを使っています。算術型の特化が必要です。
template <typename T>
class Vector3
{
public:
T x;
T y;
T z;
public:
operator std::string() const;
}
これは私がやろうとしています専門である:私がコンパイルしようとすると
template<typename T = std::enable_if<std::is_arithmetic<T>::value, T>::type>
inline Vector3<T>::operator std::string() const {
std::stringstream ss;
ss << "NOT NUMBER {" << x << ", " << y << ", " << z << "}";
return ss.str();
}
template<typename T = std::enable_if<!std::is_arithmetic<T>::value, T>::type>
inline Vector3<T>::operator std::string() const {
std::stringstream ss;
ss << "NUMBER {" << x << ", " << y << ", " << z << "}";
return ss.str();
}
はしかし、私は
エラーC2995取得:「するVector3 ::演算子のstd ::文字列(void)const ':関数 テンプレートは既に定義されています
私はこれをgoogleするとき、通常、人々がCPPファイルとヘッダーファイルでクラス/メソッドを定義した場合です。ヘッダーファイルでのみこれを行うので、私はenable_ifが正しくないと仮定できます。私が他の例を見てみると、それらは専門化をするだけですが、is_arithmiticの方法を使いたいと思います。
私は間違っていますか?
template<typename T = XXX>
inline Vector3<T>::operator std::string() const { ... }
が問題で、すべて、この時点で起こって何の控除がないていない、とT
がすでに定義されています。事前
返信いただきありがとうございます。私はすべてのグーグル・グーグルの後にタグ・ディスパッチを使用しなければならないと感じました...誰かがこれを正しいとマークする前に他のアイデアを持っているかどうかを見ていきます。 – user819640