当类定义了许多私有常量时,有什么理由不应该在类声明中#include 另一个文件?
我正在编写一个遵循简单状态转换系统的类,并定义一个由多个状态组成的处理计划,每个状态都包含一系列步骤。因为类必须在各种函数中引用这些状态和步骤(例如,当根据当前状态和步骤确定要应用哪个处理时),我最终在类的声明中定义了一堆私有枚举来进行实现可读(所以我可以参考 kStates_ModeTransition 和 kStateSteps_ModeTransition_PrepareNewSetup 等内容,而不仅仅是使用与这些状态和步骤相关的原始整数值)。
随着状态和状态步骤的列表越来越长,枚举的这个集合在类声明的中间变成了相当长的、尴尬的代码块,我觉得这些常量与实现的联系比与接口的联系更多——类的用户不一定要知道它们。有什么理由我不应该将所有这些枚举移动到另一个文件,然后只是将该文件#include 到类声明的私有部分?我还没有遇到过在类的主体中使用#include 似乎合适的另一种情况,所以我想知道是否有更好的方法来处理这个问题,或者有任何特殊原因,这样的#include 是不好的形式。此外,是否有任何合理的标准文件扩展名可用于此类文件,仅用于文本插入(它不是真正的标题......)?只是.txt?
谢谢!
编辑:再看看上面提到的替代方案之一是否完全解决了我的困境:
试图只坚持要领,这是我当前结构的一个例子
// Processor.h
class Processor
{
public:
Processor();
void Process( float* input, float* output, int numSamples );
private:
// List of possible states
enum
{
kStates_Default,
kStates_SettingChangeImmediate,
kStates_SettingChangeCrossfade,
kStates_SpecialProcessing,
kStates_NumStates
};
// Lists of steps for each state...
enum
{
kStateSteps_Default_PrepareInput,
kStateSteps_Default_CalculateIntermediateValues,
kStateSteps_Default_CalculateOutput,
kStateSteps_Default_NumSteps
};
// Imagine more lists for other states here, with comments...
// Becoming quite long...
// Private functions used in implementing various processing steps
// (some are used by multiple state-steps in varying ways)
void PrivateFunction1();
void PrivateFunction2();
// Some member variables here
};
这用于实时处理环境中,以便在执行块处理任务时更好地平衡 DSP 负载。实际上,这个类继承自一个基类,该基类处理对 Process 的调用的实际调度,并根据需要更新当前状态和状态步骤。Process() 然后由一个 switch 语句组成,该语句根据对象的当前状态和状态步骤执行某些处理功能和 IO。
枚举中声明的值在 Process() 和 processor.cpp 中的其他私有成员函数中使用,其他任何地方都没有。我已将它们声明为私有成员变量,以将它们限定在类内。有没有办法在 .cpp 中声明它们并实现相同的范围?这些都是在编译时优化的常量整数,本质上被用作 #define 的 - 我只是不想使用宏。