如果我知道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
答案 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时,你有两种方法:
关于Read函数:如果你的struct有些私有(在类中),你定义一个返回struct 1:1的公共函数,或者直接访问你的struct。您还可以在结构本身中定义成员函数(语法类似于类成员)
参考: http://en.cppreference.com/w/cpp/language/initializer_list