C++ 在c+;中有没有安全的方法来重构结构成员顺序+;

C++ 在c+;中有没有安全的方法来重构结构成员顺序+;,c++,refactoring,llvm-c++-api,C++,Refactoring,Llvm C++ Api,我为自己编写的代码通常非常依赖于成员顺序。但是如果我想改变成员的顺序,那就太糟糕了 我喜欢这种顺序依赖性,因为只要顺序一次又一次出现,它就很容易记忆,并且使代码大大缩短 如果接口必须是稳定的,那么编写十个或更多的与顺序无关的ctor当然很重要,但由此产生的ctor参数的顺序混乱是可怕的。强类型输入可能会有所帮助,但同样,大量的代码 使用指示符进行聚合初始化至少有助于在重构时不忽略依赖顺序的代码,但这还不足以使此任务成为任何人都期待的任务 您可以使用LLVM编写一个程序来进行重构,但这不是一项简单

我为自己编写的代码通常非常依赖于成员顺序。但是如果我想改变成员的顺序,那就太糟糕了

我喜欢这种顺序依赖性,因为只要顺序一次又一次出现,它就很容易记忆,并且使代码大大缩短

如果接口必须是稳定的,那么编写十个或更多的与顺序无关的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"
}
#包括
#包括
结构X{
INTA;
int b;
};
int main(){
xx{1,2};

std::我不清楚您要重构什么…示例可能会有所帮助。请注意,如果构造函数初始值设定项列表与成员顺序不匹配,则可能会出现警告。@Jarod42。正如您所说,初始值设定项列表是安全的,因为有警告。我的意思是类似于
aggregate x={1,2,3}
重新排序后必须是
aggregate={3,2,1}
。唯一安全的方法是使用指示符或将其自动化。我不清楚您要重构什么…示例可能会有所帮助。请注意,如果构造函数初始值设定项列表与成员顺序不匹配,则可能会发出警告,如果它是您想要的。@Jarod42。初始值设定项列表是安全的,因为您所说的警告。我的意思是像
aggregate x={1,2,3}
一样,重新排序后必须是
aggregate={3,2,1}
。唯一安全的方法是使用指示符或将其自动化。
#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"
}