我想给一个函数指针分配一个函数的地址,但是要处理的函数返回一个函数指针,它与自身的签名相同,导致它的递归方式我根本不能写返回类型,对于函数指针,甚至在函数声明本身......如何写一个函数指针返回一个函数指针函数?
我想简化问题的一种方式,所以它不是混乱:
我怎么能写一个函数声明例如,它可以返回一个指针本身(或具有相同签名的任何其他功能)?
????? function(int a){
// could be this function, or another with the same signature,
return arbitraryFunction;
}
?????(*func)(int) = function; // same problem as above
编辑:
现在我有一个解决方案,但我不会发布它作为一个答案,因为它是积极难看。它得到通过返回原始void*
指针作为返回类型摆脱递归的,并最终采取以下形式:
void* function(int parameter){
return arbitraryFunction; // of the same signature
}
void*(*func)(int) = function;
func = reinterpret_cast<void*(*)(int)>(func(42)); // sin
EDIT2:
似乎函数指针和普通指针之间铸造是UB,所以我不能在这种情况下使用void*
...
要回答其中一个注释,这是为了在我的程序中的多个“主”循环之间传递控制,每个循环获取它自己的函数。有很多方法可以做到这一点,但返回函数指针(或NULL来终止程序)中间循环似乎像最简单的方法,但我没有预料到指向数据和指向函数地址的指针将是不可兼容的与彼此。我认为在这种情况下返回多态函数对象最终会成为更理智的选择。
我想你不能这样做,至少不容易。 –
我不知道是否返回'void *'作为函数和函数指针的返回类型,可以让我避免递归声明... –
顺便说一句,即使Ocaml不允许这样做,除非您用'-ypeypes'调用'ocamlc'(for *递归类型*) –