爲什麼第二個例子不起作用?有沒有辦法讓第二個例子可以工作,同時仍然可以將lambda或函數轉換爲介質以便稍後參考?拉姆達的普通類型和功能可供參考
// Types I'm using
typedef void (*ANY_FUNC)(...);
typedef void (*VOID_FUNC)();
這工作
void call_void(VOID_FUNC func) {
((ANY_FUNC)func)();
};
// ...
call_void([]() { /* do something */ });
這不
template <typename fn>
void call_any(fn func) {
((ANY_FUNC)func)();
};
// ...
call_any([]() { /* do something */ });
請忽略的事實是,你永遠不會需要使用第二個例子,現在如何。它僅用於演示(相對代碼)。
這兩個示例都使用函數指針而不是lambda表達式。
順便說一句:避免用C風格的轉換,因爲他們甚至可以工作的時候,他們不應該。相反,請執行'ANY_FUNC f = func; f();'使演員(如果它發生和工作)是隱式的而不強迫任何事情。這在運行時沒有開銷。 – Yakk