通过解析器初始化类

Initialising class through a parser

本文关键字:初始化      更新时间:2023-10-16

我有一个类,我将命名为CObject与许多私有数据成员。

class CObject
{
   private:
   int a, b, c, d, e, f, g, h, i;
   string j;
   ...More data types etc
};

和另一个类解析初始化文件递归地查找对象的成员。该类满足标准库提供的虚类。

class CParser
{
   public:
    void beginParsingObject()
    {
      //etc
    }
    void parseObjectMembers(string name, int a)
    {
       //Found a member variable of the object!
    }
    void finishParsingObject()
    {
       //Finish up parsing the object
    }
};

因此,"parseObjectMembers"将被调用多少次,因为在CObject类中有多少成员变量。

当解析器在它的数据文件的条目中发现它的下一个成员变量时,CObject类将填充它的成员变量。

这是我的困惑:

在读取数据时设置CObject中的成员变量的好方法是什么?

—使用构造函数将意味着缓存传入的每个值,并在对象解析完成时构造对象—这并不令人满意,因为有很多,我希望解析器是相当通用的。

-在CObject类中使用getter和setter会将所有成员变量暴露给其他所有不需要或不想要的东西。

-使用初始化函数将是好的,但我不希望任何其他有访问该函数-朋友函数可能?

任何想法都是感激的,我会说明我在哪里可以。抱歉,代码很模糊,没有很充实,但希望它足以看到问题的症结所在。

谢谢

您所描述的似乎是序列化/反序列化。从(XML)配置文件中备份/检索对象数据是非常常见的。也许Boost序列化教程是一个好的开始。

更基本的答案可以是"使用类本身的'好友'函数/类"。