你不能用一個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
};
注:這只是擦傷。您應該添加更復雜的界面。此外,創建對象的幫助函數也可能很有用。
您可以傳遞那種對象而不是簡單的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嗎? –