我試圖將任何泛型函數作爲參數傳遞給C++函數。作爲一個額外的樂趣層,該函數將駐留在它自己的單獨的類中。在這個特殊情況下,他們將全部不參加並返回void
。這包括任何通用類的成員。將任何泛型函數作爲C++參數傳遞
我當前的代碼讀取,如:像a forwarding function,或boost::bind
class functionsFedHere {
public:
void (*callback)();
functionsFedHere(void(*)());
}
functionsFedHere::functionsFedHere (void(*callbackFunction)()) {
callback = callbackFunction;
}
void fn1() { cout<<"Fn1"<<endl; }
class myClass {
public:
int i;
void fn2() { cout<<i<<endl; }
}
class myOtherClass {
public:
string j;
void fn3() { cout<<j<<endl; }
}
int main() {
// Initialise some objects
myClass b;
b.i = 2;
myOtherClass c;
c.j = "some text";
// Works fine with non-member functions
functionsFedHere objectA(fn1);
objectA.callback();
// Doesn't work with member functions
functionsFedHere objectB(b.fn2);
functionsFedHere objectC(c.fn3);
}
我見過的解決方案,但據我所知,我不認爲這些解決方案將適合?
還值得注意的是,最終我想通過指針數組傳遞成員函數。例如,如果myPointer[]
爲指針,以myClass
類對象的數組,那麼這將是很好能夠寫類似:
functionsFedHere objectD(myPointer[0]->fn2);
編輯:顯然我是不夠清楚。 This answer不是一個合適的答案,因爲我正在尋找傳遞成員函數和非成員函數作爲參數(而建議的答案是設置一個成員指向同一類的成員函數的成員指針)。
我不認爲前面的函數示例會起作用,因爲轉發函數假定只有一個類類型,我想傳遞一個泛型類的對象。
boost::bind
很可能是答案;我只是不熟悉它。任何人都可以指向我的一些新手友好的閱讀材料嗎?
編輯2:對不起,忘了提我是一個裝置,其預C++ 11編程。
_ 「我不認爲這些解決方案將適合?」 _爲什麼? – 2014-09-03 11:03:20
boost :: bind是解決方案,除非您可以將函數myClass :: fn2和myOtherClass :: fn3定義爲靜態。 – pragnesh 2014-09-03 11:06:56
@πάνταῥεῖOriginal post已被編輯,以澄清爲什麼建議的解決方案不是答案。 – Alec 2014-09-03 13:02:08