タイプ(テンプレート)f
の値を受け取る関数があります。型にそのようなメンバー関数がある場合にのみ、メンバー関数を呼び出す方法はありますか?val
T
val
例:
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
あるものとないものがあります。