请参阅以下sudo代码。
update()
上面的代码显示了我想要做的事情。我想获得一个向量元素的引用。这取决于输入,月份。我想在函数外面使用它的引用,getObjectDependingOnMonth(...)。但是我想不出如何在向量中返回所选元素的有效引用而没有块中的重复代码。汽车和放大器; ref = ...在if块中定义。裁判在其区块之外无效。
我可以从函数返回选定的引用吗? 非常感谢你。
答案 0 :(得分:5)
只需更改代码:
if (month == "January") {
auto& ref = vec.at(1);
} else {
auto& ref = vec.at(2);
}
以下内容,以便您有一个参考
auto& ref = vec.at(month == "January" ? 1 : 2);
答案 1 :(得分:2)
在C ++中,使用指示容器中位置的迭代器是非常惯用的:
auto getObjectDependingOnMonth(const std::string& month, std::vector<Object>& vec) {
decltype(vec.begin()) pos;
if (month == "January")
pos = vec.size() > 1 ? vec.begin() + 1 : vec.end();
else
pos = vec.size() > 2 ? vec.begin() + 2 : vec.end();
if(pos != vec.end())
pos->do_something();
return pos;
}
答案 2 :(得分:1)
是!!
Object& getObjectDependingOnMonth(std::string& month, std::vector<Object>& vec) {
if (month == "January") {
vec.at(1).do_something();
return vec.at(1);
} else {
vec.at(2).do_something();
return vec.at(2);
}
}
答案 3 :(得分:0)
当您想要(重新)分配参考时,只需使用指针而不是参考。在返回时取消引用它。