9

重複の可能性:
C++ テンプレートを記述して関数の存在を確認することは可能ですか?

タイプ(テンプレート)fの値を受け取る関数があります。型にそのようなメンバー関数がある場合にのみ、メンバー関数を呼び出す方法はありますか?valTval

例:

struct Bar {
  void foo() const {}
};

template<class T>
void f(T const& val) {
  // Is there any way to call *only* if foo() is available on type T?                                                           
  // SFINAE technique?                                                                                                          
  val.foo();
}

int main() {
  Bar bar;
  f(bar);
  f(3.14);
}

おそらくboost::enable_ifを使用して、私にはSFINAEテクニックのように聞こえますが、ここでそれを機能させる方法がわかりません。Barこの例では、型を簡単に変更できないことに注意してください。Bar関数が使用可能であることを示す特定の typedef などが含まれていれば簡単だと思います。

言うまでもなく、呼び出される型のセットはわかりませTf。メンバー関数がfooあるものとないものがあります。

4

2 に答える 2

7
于 2012-08-22T09:10:31.200 に答える