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