這是的 C++ - IC的方式來做到這一點:(C++需要一個「Python化」)
標準庫包括<functional>
,報頭允許您輕鬆做到這一點。 首先,必須包括<functional>
,其提供std::function
,std::placeholders
和std::bind
。
一個function
具有以下定義: std::function<returntype(arg1type, argNtype)> f;
不幸的是,你的類或包裝功能不能採取任何形式的功能,你需要知道要麼返回類型或參數類型,或兩者的任何功能,要使用。我建議重新定義所需的函數void
返回類型,並在函數的輸出結尾添加一個額外參數,類似於C中的strcat
通過將第一個參數設置爲等於它自己和第二個參數來工作。
void myFunction(int *arg1, float *arg2, float *returnType)
這可能需要在它之外定義的函數並執行它可能看起來像這樣一類:
template<typename F>
class FunctionWrapper {
std::function<void(F)> f; //return type(argument type)
public:
FunctionWrapper(std::function<void(F)> _f) {
f = std::bind(_f, std::placeholders::_1); //makes f equal to _f, and does not specify an argument
}
void runFunc(F arg) { //Now send the arguments
f(arg);
}
};
含bind...
該生產線是最關鍵的。 std::bind
將std::function
定義爲另一個函數,並且可以以std::placeholders::_N
的形式給出參數或佔位符。佔位符滿足它們的同名,它們允許程序員將函數與未指定類型和位置/值的參數綁定。 std::bind
也可用於通過提前將某些參數提供爲常量來簡化功能,使其在未來更易於使用。 即:
std::function<int(int,int,int)> simpleFunction;
simpleFunction = std::bind(rgbToHex(255, 127, std::placeholders::_1);
simpleFunction(153);
現在,程序員只需指定藍色成分。
我希望這可以幫助任何人也有這個問題!我需要它爲即將到來的遊戲編寫一個狀態機類...請詢問您可能有的任何問題,如果需要,我會澄清我的答案!
讓我們看看你已經嘗試什麼,以及爲什麼它沒有在你的第二個片段的最後一行的工作 – quantdev 2014-11-25 01:52:13
你也不會從那裏你把'func'顯示。當你將'int&func'聲明爲一個參數時,在我看來,對於一個int的正常引用,而不是一個函數指針...你不是在這裏和那裏丟失括號嗎? – MondKin 2014-11-25 02:11:38
@quantdev,上面的代碼是我試過的,上面的符號是應該發生的,但我不知道*爲什麼*它不起作用。編譯器錯誤指向語法,並且我知道函數指針,這似乎是解決這個問題的方法。我的問題是問最好的方法是什麼,而不是「我做錯了什麼?」 – PyroAVR 2014-11-25 22:49:49