Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在重构期间与成员对象共享成员变量以实现API向后兼容性 问题_C++_Inheritance_Union_Backwards Compatibility - Fatal编程技术网

C++ 在重构期间与成员对象共享成员变量以实现API向后兼容性 问题

C++ 在重构期间与成员对象共享成员变量以实现API向后兼容性 问题,c++,inheritance,union,backwards-compatibility,C++,Inheritance,Union,Backwards Compatibility,这个问题似乎很奇怪。我想让一个成员变量与另一个成员变量的一个成员变量共享相同的地址空间。比如说, struct Bar{int a;} 结构Foo{ 酒吧; 联合{//使a2与bar.a共享相同的地址空间 int a2; int bar.a;//语法无效 } } int main(){ 富富,; foo.bar.a=5; cout我认为唯一合理的方法是引用。但你是反向操作的,也就是说,这样做: struct LinearOptimizerParams { int linearSolverTy

这个问题似乎很奇怪。我想让一个成员变量与另一个成员变量的一个成员变量共享相同的地址空间。比如说,

struct Bar{int a;}
结构Foo{
酒吧;
联合{//使a2与bar.a共享相同的地址空间
int a2;
int bar.a;//语法无效
}
}
int main(){
富富,;
foo.bar.a=5;

cout我认为唯一合理的方法是引用。但你是反向操作的,也就是说,这样做:

struct LinearOptimizerParams {
  int linearSolverType, linearSolverOrdering, linearSolverTolerance;
};

struct NonlinearOptimizerParams : LinearOptimizerParams {
  int maxIterations, errorTol, method;
  LinearOptimizerParams loParams;
  int& linearSolverType {loParams.linearSolverType};
  int& linearSolverOrdering {loParams.linearSolverOrdering};
  int& linearSolverTolerance {loParams.linearSolverTolerance};
};
您甚至可以使用宏来定义这些参数,以便缩短声明/初始化时间


这种方法的唯一问题是您需要删除或定义复制/移动构造函数。因为默认/隐式实现忽略了成员初始化。

谢谢您的建议!我本来想这样做,但我认为在某些情况下这会破坏API(虽然现在我脑子里有个屁,想不起来了)。通过复制/移动构造函数,你的意思是对整个非线性PropTimizerParams结构正确吗?(而不是单个成员变量)哦,我现在记起来了(很抱歉垃圾格式):
void func(int&a){a++;}
then
int main(){NonlinearOptimizerParams params;params.linearSolverTolerance=2;很抱歉,实际上上面的示例不太正确-我一定是傻了,以前打了个错字。谢谢你的帮助!!!是的,
NonlinearOptimizerParams
的复制/移动构造函数不能是隐式/默认的,因为它们无法正确初始化引用。是的,普通引用(名为左值引用)是被引用变量的别名,其行为与原始变量完全相同。我认为您不必在此处担心右值。您可以在此处阅读有关引用的更多信息: