我使用的std ::結合提供回調而通過首先結合一些參數提取一些邏輯。即仿效的std ::結合用C
void start() {
int secret_id = 43534;
//Bind the secret_id to the callback function object
std::function<void(std::string)> cb = std::bind(&callback, secret_id, std::placeholders::_1);
do_action(cb);
}
void do_action(std::function<void(std::string)> cb) {
std::string result = "hello world";
//Do some things...
//Call the callback
cb(result);
}
void callback(int secret_id, std::string result) {
//Callback can now do something with the result and secret_id
}
所以在上面的例子中,do_action並不需要了解secret_id等功能可以重複使用,而無需自己的secret_id。當do_action是某種異步操作時,這特別有用。
我的問題是,是否有綁定的參數值只使用C到函數指針的方法嗎?
如果不通過模擬的std ::綁定然後有另一種方式第一()回調(),而不中性do_action()複雜化來傳遞從數據?
閉包確實是在「C」中實現此目的的方式。 LibFFI提供閉包,可以移植到大多數主要操作系統:http://sourceware.org/libffi/ –
@BojanNikolic好點,libffi比蹦牀更受歡迎。一個解決OP使用libffi的問題的例子的答案可能會被讚賞。 – user4815162342