有這樣的東西:
bool exit = false;
int main() {
auto & fun = init_function;
while(!exit) {
fun = fun();
}
}
我知道我可以通過轉換為正確的函式指標來使其作業void*
,但最好知道實際的函式型別。
我正在尋找init_function
.
uj5u.com熱心網友回復:
沒有這樣的簽名。但是,如果我們應用軟體工程的基本定理,這種狀態機的前提并非不可能:一切都可以通過間接層來解決。
例如,我們可以宣告回傳不完整型別的函式。因此可以為回傳不完整型別的函式宣告函式型別。當我們完成型別時,我們可以讓它存盤一個指向我們剛剛宣告的型別的函式的指標。
struct Ret;
using FunType = auto() -> Ret;
struct Ret {
FunType *pFunc;
operator FunType* () { return pFunc; } // Allow implicit conversion back to a function pointer
};
真的,這和你需要的一樣少。
Ret init_function() {
return {init_function}; // Infinite recursion, yay!
}
bool exit = false;
int main() {
auto *fun = init_function; // Pointer to a function
while(!exit) {
fun = fun(); // Call it, get a Ret object, implicitly convert it back to a pointer
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/470085.html
上一篇:如何將成員函式作為引數傳遞