功能指向函数返回指向所述函数类型的指针

时间:2016-06-29 09:13:20

标签: c pointers

对于有限状态机的实现,我想实现类似的东西:

currentFunction = currentFunction(int arg);

currentFunction是函数指针,该函数指向返回相同函数类型的函数指针的函数。

这可能在C?怎么样?

3 个答案:

答案 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);
}