当您知道结构将来会发生变化时,实现结构读写的最佳方法是什么?

时间:2018-01-15 20:32:58

标签: c++ design-patterns solid-principles

如果我知道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

3 个答案:

答案 0 :(得分:1)

将版本或格式编号写为第一项(可能是第二项)。

读入格式编号。

确定如何根据格式版本读取剩余字段。

答案 1 :(得分:0)

只需进行面向对象的编程,不要让数据成员从类外部访问。这样,每次更改数据成员时,您都知道可能需要重新实现所有成员函数。这就是对象编程的原因:将函数和它们操作的数据放在一起。

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();}

答案 2 :(得分:-1)

由于你主要要求模式,我会在结构中使用构造函数。这使您的代码库变得简单,任何阅读它的人都可以看到属于一起的部分。

struct A 
{
    string a, b, c;
    A(a1,b1,c1) : a(a1), b(b1), c(c1) : { }; 
}

当你用字符串d扩展struct A时,你有两种方法:

  1. 扩展现有的构造函数,
  2. 添加另一个构造函数并保留当前的构造函数
  3. 关于Read函数:如果你的struct有些私有(在类中),你定义一个返回struct 1:1的公共函数,或者直接访问你的struct。您还可以在结构本身中定义成员函数(语法类似于类成员)

    参考: http://en.cppreference.com/w/cpp/language/initializer_list