我試圖寫在c
庫接口,使用這個熟悉的模式:如何將std :: function對象傳遞給函數指針的函數?
void some_c_handler(void(*func)(void*), void* data);
現在,我想寫一個C++
包裝這個功能看起來像這樣:
void my_new_cpp_handler(std::function<void()>&& func)
{
void (*p)() = foo(func);
void* data = bar(func);
some_c_handler(p, data);
}
some_c_handler
和my_new_cpp_handler
都解決了同樣的問題;他們正在接受某種功能以及某種狀態。但後者是首選,因爲它從用戶中抽象出大部分實現細節,並允許簡單地傳入一個lambda對象。
因此my_new_cpp_handler
應該參照func
參數,將其轉換爲函數指針並將其狀態轉換爲data
。
我對標準知之甚少,或者執行std::function
知道這是否是一個合理的要求。 foo
和bar
是否存在?
換句話說,我想要的是能夠將有狀態函數傳遞給c
回調處理程序,而無需手動實例化我自己的struct
類型以傳遞它。顯然std::function
已經爲我們做了這個,所以我很想能夠以某種方式將函數指針從狀態中分離出來,並將它傳遞到c
樣式處理程序。這可能嗎?