首先,我设法在单个头文件中实现了一个状态机。我知道我需要一些前向声明,并且我必须从外到内定义状态。我真正不明白的是:我将如何处理多个文件?
我的方法:
- 每个状态一个标题
- 一个包含所有可能状态的标头,前向声明
- 每个声明状态的标头都包含声明其上下文的标头
然后它看起来像这样:
// forward.h
struct Machine;
struct StA;
struct StB;
// machine.h
#include "forward.h"
struct Machine : sc::state_machine< Machine, StA > {};
// a.h
#include "forward.h" // for StB
#include "machine.h"
struct StA : sc::simple_state< StA, Machine, StB > {};
// b.h
#include "forward.h"
#include "a.h"
struct StB : sc::simple_state< StB, StA > {};
现在,如何将整个内容包含在程序中仍然是开放的。我的想法是有一个标题,其中包括从外部到内部所有州的标题。
// the_machine.h
#include "forward.h"
#include "machine.h"
#include "a.h"
#include "b.h"
// use this header now where you need the state machine
但是,我不知道一般的想法是否可以,即使可以,我也无法编译它(嗯,不完全是这个,而是我按照这个设计原则建造的机器)。一旦你意识到上下文需要完整,状态需要提前声明等等,将所有内容放在一个文件中就很容易了,但是由于复杂性和维护原因而拆分让我很紧张......Incomplete type 'StXY' used in nested name specifier
等等。