通过解析器初始化类
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序列化教程是一个好的开始。
更基本的答案可以是"使用类本身的'好友'函数/类"。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- 同时具有"聚合初始化"和"模板推导"
- 初始化具有非默认构造函数的std::数组项的更好方法
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 在C和C++中初始化结构中的数组
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 在函数内部的声明中初始化数组,并在外部使用它
- 继承:构造函数,初始化C++11中基类的类C数组成员