Converterクラスは、文字列を別の型に変換するように設計されています。したがって、ターゲットも文字列であれば、元の値のコピーを返すだけです。クラス外の特殊化テンプレートメソッドを宣言するにはどうすればよいですか?
作業コードは、このようなものです:
template<typename C>
class Converter {
public:
template<typename T>
static T To(const std::wstring& obj);
template<>
static std::wstring To(const std::wstring& obj) {
return obj;
}
};
template<typename C>
template<typename T>
T Converter<C>::To(const std::wstring& obj) {
// Conversion
return T();
}
(VC++ 2015上で動作アップデート3)
私はこのようなクラス宣言の外に専門の方法を移動しようとした:
template<typename C>
template<>
std::wstring Converter<C>::To<std::wstring>(const std::wstring& obj) {
return obj;
}
いくつかのコンパイルエラーがあります。
エラーC3212「のコンバーター:: TO」: テンプレートメンバーの明示的な特殊化は
エラーC2768「のコンバーター::」に明示的な特殊のメンバーである必要があります。明示的なテンプレートの不正使用 引数
あなたの「作業コード」[うまくいかない](http://coliru.stacked-crooked.com/a/852632a3c4a83d69)。 – cdhowie
私はどちらも標準によると実際に違法だと思うが、何らかの理由でMSVCが最初のことを許してしまう。どちらもGCCの下では動作しません。外側のテンプレートを特化せずに内側のテンプレートを明示的に特殊化することはできないようです。 –
@cdhowieはVC++ 2015で動作します。 – user1633272