私はテンプレートクラスを持っています:
template<class T>
class someClient
{
void someCallbackA() {foo_->onA();}
void someCallbackB() {foo_->onB();}
private:
T* foo_;
};
onA
andonB
インターフェイスをサポートするさまざまな型 T の束でインスタンス化できます。私が使用するいくつかの異なるタイプのうちの 2 つがT
特定の動作を制御する必要がある場合があるため、これら 2 つのタイプにsomeClient
関数を追加する必要があります (それらを および と呼びます)。次に、コードの一部を呼び出す必要がありますが、型にそれがない場合でも中断することはありません。これらの2つのタイプのみを呼び出すが、そこには存在しない、またはタイプがまたはでない場合は何も展開しないようにする方法はありますか?doBar()
Edge1
Edge2
someClient
foo_->doBar()
foo_
boost::enable_if
someClient::doBar()
foo_->doBar()
Edge1
Edge2
私は次のように考えていました:
template <class T, enable_if<mpl_or<is_same<T,Edge1>, is_same<T,Edge2> > >
someClient<T>::doBar() {foo_->doBar();}