0
說我有一個功能foo
:如何將成員函數作爲參數傳遞給不期望的函數?
void foo(void (*ftn)(int x))
{
ftn(5);
}
它需要作爲參數void
函數接受一個int作爲參數。考慮
void func1(int x) {}
class X {
public:
void func2(int x) {}
};
現在 foo(&func1)
是確定的。
但foo(&X::func2)
也不行,因爲X::func2
也不是一成不變的,需要上下文對象及其函數指針型是不同的。
我試過foo(std::bind(&X:func2, this))
從X
裏面,但這也引起類型不匹配。
這樣做的正確方法是什麼?
考慮改變你的函數,把'std :: function'作爲它的參數。這樣你可以使用'std :: bind'來透明地使用一個自由函數,靜態成員函數或者非靜態成員函數。 – 2014-11-01 18:32:13
模板函數foo最有可能是最簡單的解決方案。編輯:是的,如上所述,更簡單的可能是std :: function – Creris 2014-11-01 18:32:15
如果我不允許更改'foo'(庫的一部分)怎麼辦? – batman 2014-11-01 18:39:52