他の人がコメントやリンクで指摘したように、現在のC++のテンプレートの構文は、この使用方法をサポートする簡単な方法を提供していません。しかし、もしあなたが本当にこれをやりたいと思っていれば、複雑さを導入する気にはなりません。あなたがに対処する必要が
二つの主な問題は、次のとおりです。
- 関数テンプレートは、部分的な特殊化をサポートしていません。
- クラススコープの一部として定義すると、部分的な特殊化は機能しません。
あなたが探しているものに近づき、それを試してみることができます。
- 動きクラスの外テンプレート定義。
- は、部分的なスペックを許可する代わりに、クラスファンクタとしてそれらのテンプレートを定義します。
このような何かのために導入された余分なコードの非常に多くのですが、あなたはそれが可能だ十分にこの悪い行いたい場合は、私が思う
template<typename T>
class test
{
public:
template <typename T2>
static void f();
};
template <typename T1, typename T2>
struct f
{
void operator()(void) { cout << "generic" << endl; }
};
template <typename T1>
struct f<T1, void>
{
void operator()(void) { cout << "void" << endl; }
};
template <typename T>
template <typename T2>
void test<T>::f()
{
::f<T, T2>()();
}
int main()
{
test<int>::f<int>(); // prints 'generic'
test<int>::f<void>(); // prints 'void'
}
。私が求めているものを
http://stackoverflow.com/questions/767477/template-specialization-for-static-member-functions-howto – vulkanino
ません。そこでは、構造体Xはテンプレート化されていません。私はfをクラス定義の外に移動しようとしましたが、どちらも動作しません。 –
また、[this] [1]の投稿を参照してください。 [1]:http://stackoverflow.com/questions/1723537/template-specialization-of-a-single-method-from-a-templated-class –