[英]Changing const references
假设我有一个返回常量引用的函数。 我无法更改此功能。 我还有另一个班级叫做 MyClass
const Value& GetValue(const MyClass& m, const unsigned long i) {
....
val is assigned by using m & i
...
return val;
}
代码中的其他地方。 我必须实现另一个功能:
void NewFunction(int r, int i)
{
MyClass a = GetClass();
MyClass b = GetClass();
MyClass c = GetClass();
...
Above a, b, and c are modified differently
....
const Value& cv;
if (r==1)
cv = GetValue(a,i);
else if (r==2)
cv = GetValue(b,i);
else
cv = GetValue(c,i);
...
}
第一个“const Value & cv;” 需要在声明时分配,但在我通过条件 if-else 之前,我不知道声明时的分配是什么。 第二个“GetValue”返回一个常量,所以我不知道如何处理它,如果我以后可以安全地更改“cv”
我无法更改函数的模板。
我必须求助于指针还是有另一种优雅的方法来处理这个问题?
编辑:为了增加复杂性,Value 是一个抽象类,所以我不能做
Value cv;
因为编译器正确地抱怨“不允许抽象类的对象”
虽然它不是最漂亮的,但您可以使用嵌套的三元组:
const Value& cv = (a == 1) ? GetValue(a, i)
: (a == 2) ? GetValue(b, i)
: GetValue(c, i)
您还可以执行以下操作:
MyClass obj_to_pass;
if (a==1)
obj_to_pass = a;
else if (a==2)
obj_to_pass = b;
else
obj_to_pass = c;
const Value& cv = GetValue(obj_to_pass, i);
const Value& NewFunctionHelper(int a, const unsigned long i, const MyClass& a, const MyClass& b, const MyClass& c) {
if (a==1)
return GetValue(a,i);
else if (a==2)
return GetValue(b,i);
else
return GetValue(c,i);
}
然后在您的正常方法中:
Above a, b, and c are modified differently
....
const Value& cv = NewFunctionHelper(a, i, a, b, c);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.