当您知道结构将来会更改时,实现结构读写的最佳方法是什么
What is the best way to implement a read and write of a struct when you know the struct will change in the future?
如果我有一个我知道尚未完全定义的struct A
,但我知道"a"和"b"是它的成员,我需要编写一个函数来读取和填充它的 xml 并将其写入 xml 就像现在一样。
我如何编写读写方法,以便将来有人需要向struct A
添加成员,我可以帮助他收到错误,说他们还需要实现支持额外成员功能的相应读写?
struct A
{
string a, b;
}
void read(A&);
void write(A&);
// in the future
// A becomes
struct A
{
string a, b, c;
}
void read(A&); // should give a useful error saying the read is outdated
void write(A&); // should give a useful error saying the write is outdated
将版本号或格式编号写为第一项(可能是第二项(。
读取格式编号。
确定如何根据格式版本读取其余字段。
只做面向对象的编程,不要让数据成员从类外部访问。这样,每次更改数据成员时,您都知道可能必须重新实现所有成员函数。这就是对象编程的原因:将函数和它们操作的数据紧密地结合在一起。
class A{
private:
string a,b,c;
public:
void read();
void write() const;
};
// free function helpers:
void read(A&a){ a.read();}
void wirte(const A& a){a.write();}
由于您主要要求模式,因此我将在结构中使用构造函数。这使您的代码库变得简单,任何阅读它的人都可以看到属于一起的部分。
struct A
{
string a, b, c;
A(a1,b1,c1) : a(a1), b(b1), c(c1) : { };
}
当您通过字符串 d 扩展结构 A 时,您有 2 种方法:
- 扩展现有构造函数,
- 添加另一个构造函数并保留当前构造函数以实现兼容性
关于读取函数:如果你的结构有点私有(在一个类中(,你可以定义一个公共函数,返回你的结构1:1,或者你直接访问你的结构。您还可以在结构本身中定义成员函数(语法类似于类成员(
参考:http://en.cppreference.com/w/cpp/language/initializer_list
相关文章:
- 用C++快速读写文件
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 在一个读写器队列中,我可以用volatile替换原子吗
- C++套接字对不读/写父/子
- 如何调试读写器锁的死锁?
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- Linux 挂载使用重新挂载以允许读写
- C++中读/写二进制文件
- 如何读/写或遍历 std::array 中的特定元素范围?
- 内存排序或读取-修改-写入操作,仅(读/写)内存顺序
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 为什么使用_access时只读测试对读写文件有效
- Boost::Asio串行读/写打开:参数不正确
- 如何创建一个函数以读/写数据给结构成员
- 当您知道结构将来会更改时,实现结构读写的最佳方法是什么
- 如何读写结构向量到文件
- C/ c++:读写时间戳数据到文件,支持多体系结构
- 远程读写结构
- c++中二进制文件中读写数组结构的问题