簡體   English   中英

更改常量引用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM