C struct和typdef

我不确定标题,因为我不知道它的真正含义.

我试图理解下面链接中的代码.

Color Based Particle Filter

我一般都了解程序的功能,但我无法弄清楚“state.h”.这段代码有什么作用?特别是“typedef”,“State_”和“pp”部分对我来说看起来很陌生.

为清楚起见,我会在这里放一些代码.

struct StateData;
struct State_;
typedef State_ (*State)(StateData&);
struct State_
{
    State_( State pp ) : p( pp ) { }
    operator State()
    {
        return p;
    }
    State p;
};

State_ state_start(StateData& d);
State_ state_selecting(StateData& d);
State_ state_initializing(StateData& d);
State_ state_tracking(StateData& d);

任何形式的帮助将不胜感激.

简明扼要:State是函数pointer的别名.State_是一个包装类,它有一个State成员,可以隐式转换为该State.

需要State_包装器的原因是因为无法表达返回指向同一类型函数的指针的函数.包装器摆脱了自我引用.

逐行:

struct StateData;

类StateData的前向声明.

struct State_;

类State_的前向声明.

typedef State_ (*State)(StateData&);

这个有点棘手.它将State定义为函数指针的类型别名,该函数指针可以指向返回State_并获取StateData&的函数.作为一个论点.在代码片段末尾声明的函数可以由此类型的函数指针指向.

在我看来,考虑到已经存在State_类,所选择的名称非常混乱.虽然我通常反对匈牙利表示法,但我建议总是应用后缀或前缀来表示函数指针,比如state_fun或state_handler或state_callback,

struct State_
{

这开始了State_calss的定义.

State_( State pp ) : p( pp ) { }

这定义了类的构造函数.参数是先前定义的函数指针类型.它初始化将很快声明的成员.

operator State()
    {
        return p;
    }

会员功能.更具体地说,用户定义了转换为函数指针类型.

State p;

声明在构造函数中初始化的成员.

};

State_ state_start(StateData& d);
State_ state_selecting(StateData& d);
State_ state_initializing(StateData& d);
State_ state_tracking(StateData& d);

免费功能,可由国家指出.

相关文章
相关标签/搜索