我想重新排列这段代码:
if (x_can_be_true) {
for (x : {false, true}) {
do_work(x);
}
} else {
do_work(false);
}
因此do_work
仅被调用一次。
从概念上讲,我想这样做:
for (x : (x_can_be_true ? {false, true} : {false})) {
do_work(x);
}
关于如何使该代码实际编译的任何建议?
编辑:
do_work
是实际问题的简化占位符。
这是许多代码行,这些代码取决于前几行的许多参数。
问题的目的是找到一种避免重复很多行的模式。因为这不是很好的编码习惯。 ;->
我可以使它具有许多参数的功能。或使用参数块。但是... ;->
答案 0 :(得分:8)
那
do_work(false);
if (x_can_be_true)
do_work(true);
这等效于您的简单示例,但可能不是您真的试图做的事情的解决方案。
答案 1 :(得分:2)
怎么样
std::set<bool> vals = {false};
vals.emplace(x_can_be_true);
for (auto x : vals)
do_work(x);
答案 2 :(得分:0)
我更喜欢Kevin的答案。但是如果您发现这一点足够可读:
for (auto x : (x_can_be_true ? vector<bool>{false, true} : vector<bool>{false})) {
do_work(x);
}
但是,您应该阅读当天的报价:
调试的难度是一开始编写代码的两倍。 因此,如果您尽可能巧妙地编写代码, 定义,不足以调试它。
-B.W.克尼根