我有一个for循环,我想多次使用而不复制并粘贴代码,所以我使用的是模板。 Answer I used for the template. 模板和循环本身按预期工作,但是从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;
};
答案 0 :(得分:5)
我想:
void Test(TrafficLight s) { ... }
应该是:
void Test(TrafficLight& s) { ... }
因为现在您正在编辑副本。
因此需要通过引用传递 。
答案 1 :(得分:2)
改变这个:
void Test(TrafficLight s)
到此:
void Test(TrafficLight& s)
因为您需要通过引用传递,以便在函数终止后保持更改。
您的代码按值传递参数(它会在s
的主体内创建Test()
的副本。