我为自己使用而编写的代码通常非常依赖于成员顺序。但是,如果我想更改成员的顺序,那就不好了。
我喜欢这种顺序依赖性,因为无论顺序在哪里出现一次,都容易记住并且使代码大大缩短。
如果您的接口必须稳定,但是ctor参数的排序混乱非常可怕,那么编写十个或更多ctor来实现顺序独立当然很重要。强类型可以帮助您,但是同样,很多代码也可以。
使用指示符进行聚合初始化至少有助于在重构时不要忽略依赖于顺序的代码,但这样做不足以使任何人都期待此任务。
您可以使用LLVM编写程序来进行此重构,但这并不是一项艰巨的一日任务。有没有人已经做到这一点并开源?还有其他方法可以安全地执行此操作吗?
这里是一个例子:
原始文件:
#include <iostream>
#include <string>
struct X {
int a;
int b;
};
int main () {
X x{1, 2};
std::cout << x.a << ' ' << x.b << std::endl;
// ok, prints "1 2"
}
修改很少的文件,因为是手动完成的
#include <iostream>
#include <string>
struct X {
int b; // b is now before a
int a;
};
int main () {
X x{1, 2}; // wrong, should be x{2,1} because b is now first member
std::cout << x.a << ' ' << x.b << std::endl;
// BAD, prints "2 1" but should be "1 2"
}