class base
{
};
class derived
{
};
template<class T> void foo() {}
int main()
{
foo<int>();
foo<derived>();
}
のT =導出のためにfoo
を特化したいと考えています。これは可能ですか、base
自体を専門にする必要がありますか?特定のタイプの導出のための関数テンプレート特殊化
class base
{
};
class derived
{
};
template<class T> void foo() {}
int main()
{
foo<int>();
foo<derived>();
}
のT =導出のためにfoo
を特化したいと考えています。これは可能ですか、base
自体を専門にする必要がありますか?特定のタイプの導出のための関数テンプレート特殊化
1つのオプションは、boost type traitsを使用することです(または勇気がある場合は、そのライブラリのソースを見てください)。
コンパイル時に、型が別の型から継承しているかどうかを検出し、適切な実装を選択できます。
in the manual for boost::enable_ifと記載されているように、boost :: enable_ifとboost :: is_base_ofを組み合わせることができます。
template <class T>
T foo(typename enable_if<boost::is_base_of<base,T> >::type* dummy = 0);