テンプレート付き関数を使用したヘルパーテンプレートがあります。私は、特定のタイプのいくつかの値をキャストするキャストたりしないように、他のポリシーベースのテンプレートクラスのためにそれを使用しています:テンプレート付き関数を使用した特殊化テンプレートクラス
// use this when needed additional value cast
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u)
{
return static_cast<T>(u);
}
};
// use this specialization when no needed to cast value
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u)
{
return u;
}
};
は今、私は宣言と実装(.Hと.hhファイル)に、これらのクラスを分割したいです
だから私はこのような宣言を書く:
template <typename T>
struct AdditionalValueStaticCaster
{
template <typename U>
static T cast(U u);
};
template <>
struct AdditionalValueStaticCaster<void>
{
template <typename U>
static U cast(U u);
};
をそして今、私は実装を書きたいです。
template <typename T>
template <typename U>
T AdditionalValueStaticCaster<T>::cast(U u)
{
return static_cast<T>(u);
}
しかし、これは私がラインtemplate<>
を削除すると、すべてがOKコンパイルが、私はまだ疑問を持っているエラーerror: too many template-parameter-lists
template<>
template <typename U>
U AdditionalValueStaticCaster<void>::cast(U u)
{
return u;
}
の原因:これはokです、それは適切なソリューションであるか、私が何かを逃しましたか?
はい、できます。それを試してみるべきです。 – Barry