初始化静态对象图

时间:2014-10-19 15:44:19

标签: c++ tree static-members

我想创建一些包含应用程序常量数据的对象。

到目前为止,我已经获得了以下代码:

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变量,我认为可以以某种方式消除它。将所有内容放入构造函数中可能是可能的,但这会过多地破坏代码。

你们有什么建议吗?

0 个答案:

没有答案