Hus*_*kfa 0 c++ integer if-statement compare
在当前的两个答案中,我选择了使用基于范围的 for 循环的答案,因为它更好地满足了我的第一个要求,即避免冗长。可变参数模板的答案很有趣(我会尝试一下!),但比我想要的要长(因为我希望所有事情都在我提到的变量相同的函数内完成)。
如果其他人提出另一种方法,我仍然会关注(即使在遥远的将来!)并且总是很乐意选择可能更好的解决方案;)
我正在使用 Visual Studio 2017 Professional、C++、MFC
我有一个奇怪的问题,可能没有解决方案
我有一个遇到多个int变量的函数,假设我总共有六个变量:int1, int2, ..., int6。
我想将这些值中的每一个与 进行比较-1。如果其中任何一个== -1,则该void函数return提前退出。
我知道您可能想到的第一个想法是一个冗长的if声明,可能有几个分支,例如:
if ( (int1 == -1) || (int2 == -1) || ... || (int6 == -1) ) { return;}
或者
if (int1 == -1) { return;}
else if (int2 == -1) { return;}
...
else if (int6 == -1) { return;}
Run Code Online (Sandbox Code Playgroud)
另一个想法是将所有这些ints 推入 astd::vector<int>然后迭代它们,将每个元素与-1子句进行比较if,return如果存在匹配则进行 ing。如果没有其他解决方案,我将采用这个计划。
有没有一种方法可以用更优雅的方法来检查这些值:
std::vector再说一次,我完全理解是否没有适合我的规范的方法,在这种情况下我会采用该方法std::vector。我确实知道在某些时候我必须硬着头皮去比较 sint但我很感兴趣是否还有其他方法!
感谢您的帮助,提前谢谢您!:D
您可以使用带有折叠表达式的可变参数模板。
template<typename ...T>
bool any_equal_to_minus_1(T... t) {
return (... || (t == -1));
}
...
if (any_equal_to_minus_1(int1, int2, etc)) return;
Run Code Online (Sandbox Code Playgroud)
然后,您可以将函数包装在调用端,从而节省变量的输入:
void your_function_real_part(int arg1, int arg2, int arg3);
template<typename ...T>
void your_function(T... t) {
if (any_equal_to_minus_1(t...)) return;
your_function_real_part(t...);
}
int main() {
your_function(1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)