我想通過我的類方法作爲參數傳遞給一個(第三方)功能 (聽者 - 不能改變),它接受一個函數指針和一個void*
。以下是一個示例:綁定類的方法,並把它作爲函數指針
#include <functional>
typedef void(*pfnc) (void*);
struct Foo
{
static void static_foo(void*)
{
}
void foo(void*)
{
}
void listner(pfnc f, void* p)
{
f(p);
}
void test()
{
listner(static_foo); // works with static method
auto f = [](void*) {};
listner(f); // works with lambda
std::function<void(void*)> stdf = std::bind(&Foo::foo, this, std::placeholders::_1);
listner(stdf); // does not compile with not static method
}
};
不幸的是,我的解決方案不能編譯。我需要改變什麼?
函數指針沒有狀態。你將不得不使用'void *'參數。從另一方面來說,這個參數是存在的,與我遇到的其他一些特定的C API不同。 – chris
你確定'listener'方法只接受'pfnc'嗎?通常這樣的方法接受用戶指定的'void *'參數,該參數在回調處理器方法期間傳遞... –
我通常使用一個lambda來捕獲此方法來調用該方法。 –