C struct和typdef

前端之家收集整理的这篇文章主要介绍了C struct和typdef前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我不确定标题,因为我不知道它的真正含义.

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

Color Based Particle Filter

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

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

  1. struct StateData;
  2. struct State_;
  3. typedef State_ (*State)(StateData&);
  4. struct State_
  5. {
  6. State_( State pp ) : p( pp ) { }
  7. operator State()
  8. {
  9. return p;
  10. }
  11. State p;
  12. };
  13.  
  14. State_ state_start(StateData& d);
  15. State_ state_selecting(StateData& d);
  16. State_ state_initializing(StateData& d);
  17. State_ state_tracking(StateData& d);

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

解决方法

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

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

逐行:

  1. struct StateData;

类StateData的前向声明.

  1. struct State_;

类State_的前向声明.

  1. typedef State_ (*State)(StateData&);

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

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

  1. struct State_
  2. {

这开始了State_calss的定义.

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

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

  1. operator State()
  2. {
  3. return p;
  4. }

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

  1. State p;

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

  1. };
  2.  
  3. State_ state_start(StateData& d);
  4. State_ state_selecting(StateData& d);
  5. State_ state_initializing(StateData& d);
  6. State_ state_tracking(StateData& d);

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

猜你在找的C&C++相关文章