あなたはfunction
オブジェクトとそれを行うことはできません。
可能性は、メソッドとオブジェクトへの参照を格納するラッパーを構築することです。このような
何か:
template<typename T, typename Fn>
struct MemberFunctionPointer {
MemberFunctionPointer(T* ref, Fn fn) : m_ref(ref),
m_method(fn) { }
template<typename... Args>
auto operator()(Args&&... args) {
return (m_ref->*m_method)(std::forward<Args...>(args)...);
}
T* m_ref = nullptr; // a reference (pointer) to the object instance
Fn m_method = nullptr; // a reference to the function method
};
注:これはただの傷です。より洗練されたインターフェイスを追加する必要があります。さらに、MemberFunctionPointer
オブジェクトを作成するためのヘルパー関数も同様に便利です。
単純にfunction
の代わりにその種のオブジェクトを渡すことができます。
struct Foo {
void bar() {
// something
}
};
int main(int argc, char *argv[]) {
Foo f;
MemberFunctionPointer<Foo, decltype(&Foo::bar)> method(&f, &Foo::bar);
method(); // call the method on the object f.
assert(&f == method.get_obj_reference());
return 0;
}
これはできません。 'std :: function'のターゲットを取得することはできますが、ターゲットタイプは、あなたが後に情報を取得するためのインターフェースを持たない、認識できないタイプのバインド式です。 –
@KerrekSBそれは答えです:) – Quentin
@KerrekSB std :: function :: targetの使用例を教えてください。 –