我正在尝试创建一个线程状态机,其中每个状态都返回指向下一个状态的指针。我有许多状态机正在运行,因此所有这些状态机的下一个状态存储在一个排序的数组中,以循环方式调用它们。所以我想做的是:
pState[i] = (pState[i])();
我理解如何返回一般的函数指针但是因为我需要返回的指针是一种函数类型,它返回一个指向函数的指针,递归让我感到困惑。国家看起来像:
pSatateFunc StateA(void){
// ... code ...
return StateB;
}
那么,我如何定义这个以便我可以定义指针数组?
答案 0 :(得分:1)
你不能直接这样做,但是你可以通过引入一个struct
类型来间接地做到这一点,它的唯一成员是一个函数指针:
struct state
{
struct state (*func)(void);
};
然后定义您的函数以返回此类型:
struct state StateA(void)
{
/* ... code ... */
return (struct state){ StateB };
}
您的pstate
数组也属于这种类型:
struct state pState[N];
/* ... */
pState[i] = pState[i].func();