C++ 结构和类型定义

标签 c++

我不确定这个标题,因为我不知道它到底是关于什么的。

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

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 是函数指针的别名。State_ 是一个包装类,它有一个 State 成员,并且可以隐式转换为那个状态

之所以需要 State_ 包装器,是因为无法表达返回指向相同类型函数的指针的函数。包装器摆脱了自引用。


逐行:

struct StateData;

StateData 类的前向声明。

struct State_;

State_ 类的前向声明。

typedef State_ (*State)(StateData&);

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

在我看来,考虑到已经有一个 State_ 类,选择的名称非常令人困惑。虽然我通常反对匈牙利表示法,但我建议始终应用后缀或前缀来表示函数指针,例如 state_funstate_handlerstate_callback,

struct State_
{

这开始了 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 指向的自由函数。

关于C++ 结构和类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40328757/

相关文章:

c++ - C++中extern "C"的作用是什么?

c++ - 无法从 initializer_list 转换为我的类型,该类型具有模板化可变参数构造函数

c++ - 这种风格好吗?

c++ - 输出不符合预期

C++继承函数中的默认操作

java - Java 中 Protocol Buffer 分隔的 I/O 函数是否有 C++ 等效项?

c++ - 使用 Eclipse 构建 c++0x 特性

c++ - 程序从不打印任何输出

c++ - Incomplete parameter error Including postgres.cpp working file in other .cpp 文件

c++ - 头文件中的 static const std::string