boost::is_convertible
したがって、テンプレートの種類が次の場合に特定のコードを適用したいWellKnownType
:
template <typename T>
class Foo {
public:
Foo() {
// apply specific function to m_t
// if T is convertible to WellKnownType
}
T m_t;
};
このために、ファンクターを使用することを考えました:
template <typename T>
struct my_functor {
void operator()(T& t) {
// do nothing by default
}
};
次に、次の場合に別のことを行うために、このファンクターを特殊化したいと思いますboost::is_convertible<T, WellKnownType>
。
template <>
struct my_functor<...> {
void operator()(T& t) {
// do something to t because it is convertible to WellKnownType
}
};
次に、ファンクターを使用するように定義を簡単に変更し、変換可能Foo
な場合は何かを行い、そうでない場合は何もしないと思います。T
WellKnownType
template <typename T>
class Foo {
public:
Foo() {
my_functor<T>()(m_t);
}
T m_t;
};
私が知らないのは、この動作を達成する方法です。については知ってBOOST_CONCEPT_REQUIRES
いますが、それをテンプレートの特殊化に適用する方法がわかりません。何か助けはありますか?