我一直在尝试编写自己的状态机,其中每个状态都是从状态基类派生的单独类。
无论我在哪里包含我的 state_t 类文件(#include“state_t.h”),我都希望包含所有派生的状态类头文件,因此我不必每次需要使用状态机时都单独包含它们或创建一个新的状态。
因为直到 state_t.h 结束才定义“state_t”,所以我只能在文件 state_t.h 的末尾包含我的状态文件。我以前从未编写过这样做的代码,这似乎有点奇怪!我可以添加一个将所有文件收集在一起的顶级“statemachine.h”,但这似乎是一种浪费。
我的问题是:这样做是否正确/安全/可以?任何缺点/问题?
注意:目前我的代码都是测试代码,并且是用 Qt 编写的,但它应该是一个直接的 c++ 问题。
这是我的基类(state_t.h) -注意最后的#include :
#ifndef STATE_T_H
#define STATE_T_H
#include <QByteArray>
#include <QDebug>
class state_t
{
public:
state_t(QByteArray stateName);
virtual ~state_t();
virtual state_t * processState(int input) = 0;
QByteArray getState();
QByteArray name;
};
#include "teststate1.h"
#include "teststate2.h"
#endif // STATE_T_H
这是一个状态派生类(teststate1.h):
#ifndef TESTSTATE1_H
#define TESTSTATE1_H
#include "state_t.h"
class testState1 : public state_t
{
public:
testState1();
state_t *processState(int input);
};
#endif // TESTSTATE1_H
这是我的 main.cpp:
#include <QCoreApplication>
#include <QDebug>
#include "state_t.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
state_t *myState = new testState1();
myState = myState->processState(1);
myState = myState->processState(2);
myState = myState->processState(3);
myState = myState->processState(1);
return a.exec();
}
注意:代码一切正常,这真的是一个“正确性”的问题。