我想创建一些包含应用程序常量数据的对象。
到目前为止,我已经获得了以下代码:
class NodeObject;
class ComplexData
{
struct datum
{
Type type;
int value;
};
vector<datum> data;
vector<NodeObject*> nodeObjects;
public:
void addDatum(Type, int) const;
void addNodeObject(NodeObject*) const;
};
class NodeObject
{
int id;
string name;
ComplexData complexData;
NodeObject(string); // private
public:
static const NodeObject NODE_1;
static const NodeObject NODE_2;
static const NodeObject NODE_3;
};
const NodeObject NodeObject::NODE_1("Node 1");
const NodeObject NodeObject::NODE_2("Node 2");
const NodeObject NodeObject::NODE_3("Node 3");
但是,我不确定如何将更复杂的数据放入我的节点,同时保持单个节点不变。我想,我可以删除const
关键字,因为成员是私有的,但这并没有真正解决问题。目前我使用这个非常丑陋的方法 - 我希望有更好的方法:
class NodeObject
{
// stuff like before ...
private:
static bool initialized;
static bool initialize();
};
bool NodeObject::initialize() {
// for example
NODE_1.complexData.addDatum(someType, 1);
NODE_3.complexData.addNodeObject(&NODE_1);
}
bool NodeObject::initialized = NodeObject::initialize();
由于事后我不需要bool
变量,我认为可以以某种方式消除它。将所有内容放入构造函数中可能是可能的,但这会过多地破坏代码。
你们有什么建议吗?