对于有限状态机的实现,我想实现类似的东西:
currentFunction = currentFunction(int arg);
currentFunction
是函数指针,该函数指向返回相同函数类型的函数指针的函数。
这可能在C?怎么样?
答案 0 :(得分:4)
首先,需要做一些真正模糊的事情,比如总是源于泥泞的程序设计。你正试图解决问题X,你认为方法Y会这样做。所以你问我们如何让Y工作,即使它很可能不是正确的解决方案。问题的根源可能是X设计不正确。
话虽这么说,你可以通过使用struct作为包装器来实现这一点,从而利用不完整的结构类型:
typedef struct func_wrapper_t
{
struct func_wrapper_t (*func) (int);
} func_t;
...
func_t some_function (int x)
{
...
return (func_t){ some_function };
}
...
int main(void)
{
func_t f = some_function(0);
return 0;
}
答案 1 :(得分:1)
让函数返回指向函数的指针,然后将其强制转换为正确的类型:
typedef void( plain )( void );
typedef plain*( type )( int );
plain* Function2( int value );
plain* Function( int value )
{
return ( plain* )&Function2 ;
}
int main( void )
{
type* function = ( type* )Function( 55 ) ;
}
这非常容易出错,因此您应该改变解决方案的方法,而不是使用它。
答案 2 :(得分:-2)
有一个丑陋的解决方案依赖于施放
typedef void* (*FunctionType)(int);
void* func(int a){
return (void*)func;
}
int main(void){
FunctionType p = (FunctionType)func(3);
}