簡體   English   中英

編輯模板內的列表不保存

[英]Editing list inside template not saving

我有一個for循環,我想多次使用沒有復制和粘貼代碼所以我使用模板。 我用於模板的答案。 模板和循環本身按預期工作,但是從for循環中調用的函數內的列表中更改變量不起作用。 如果我在'Test'函數中更改s.Color,它在該函數或示例循環之外沒有更改。

那么為什么它不會在循環之外改變呢? 我怎樣才能確保它在循環之外發生變化?

模板:

void Test(TrafficLight s) {
    switch (s.Type) {
    case hfdWeg:
        s.Color = queueCurrent.HoofdwegColor;
        break;
    case zWeg:
        s.Color = queueCurrent.ZijwegColor;
        break;
    case vtPad:
        s.Color = queueCurrent.VoetpadColor;
        break;
    default:
        std::cout << "\nError";
        break;
    }
}

template<typename Func>
inline void do_something_loop(Func f)
{
    for (std::list<TrafficLight>::iterator i = Lichten.begin(); i !=    Lichten.end(); ++i) {
        TrafficLight & s(*i);
        f(s);
    }
}

調用模板:

do_something_loop(Test);

列表:

std::list<TrafficLight> Lichten;

TrafficLight類:

class TrafficLight {
private:
public:
    TrafficLight(TrafficLightType type, TrafficLightColor color = R) {
        Color = color;
        Type = type;
    }
    TrafficLightColor Color;
    TrafficLightType Type;
};

我想:

void Test(TrafficLight s) { ... }

應該:

void Test(TrafficLight& s) { ... }

因為現在你編輯了一個副本。

所以需要通過引用來代替。

改變這個:

void Test(TrafficLight s)

對此:

void Test(TrafficLight& s)

因為您需要通過引用傳遞,以便在函數終止后保持更改。

你的代碼按值傳遞參數(它在Test()體內創建一個s副本 )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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