タイプ(テンプレート)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 などが含まれていれば簡単だと思います。
言うまでもなく、呼び出される型のセットはわかりませTんf。メンバー関数がfooあるものとないものがあります。