目前我尝试实施一个小型的State-Action-Matrix。 我有一个表格,其中包含有关我当前状态的信息,程序将从该状态转换到新的跟随状态。
在从一个状态转换到另一个状态的过程中,程序应该调用特定的成员函数。
Transitiontable的例子:
typedef struct
{
int state;
int followState;
/* POINTER TO MEMBERFUNCTION */
}STATE_TRANSITION;
STATE_TRANSITION stateTransition[] =
{
{ state1, state2, /* ... */ },
/* ... */
};
从这个表中调用的Memeber函数位于一个类中。
class A
{
public:
int foo(int);
};
我的问题现在是,我如何调用Memeberfunction'foo'作为示例并将参数传递给它?
任何帮助都会被嘲笑,非常感谢。
答案 0 :(得分:0)
实现Lookuptable的Typedefinitions,从一个当前状态指向一个follow-state。第一个typedef定义了一个Memberfunction-Pointer。然后,所述指针在结构中实现,以表示Lookuptable。
typedef bool(MP_Commands::*Member)();
typedef struct
{
uint8_t currState; // Current State
uint8_t followState; // Follow State
Member func; // Transition Function
}STATE_TRANSITION;
然后我将所述查找表作为我的类的私有属性进行了整合,因此指针可以访问私有成员函数。
class A
{
private:
STATE_TRANSITION stateTransitions[15];
/*...*/
};
Lookup-Table本身实现如下:
static const STATE_TRANSITION _stateTransitions[] =
{
{ state1, state2, &A::memberFun },
/*...*/
};
memcpy(stateTransitions, _stateTransitions,
LENGTH(stateTransitions) * sizeof(stateTransitions[0]));
--- --- EDIT 对不起,我忘了提及如何使用这样的实现:
(*this.*stateTransitions[i].transition)();
示例:
if((*this.*stateTransitions[i].transition)())
{ /* Do ... */ }