我想根据相同的限制检查不同的变量。我怎么能优雅地把这个?
请不要说if(i>8 && j>8)
。我知道,但我对两个变量都有更多的条件,比如
if(i,j>8 || i,j<0)
如何去做?我必须写出4个条件吗?
答案 0 :(得分:1)
你必须写出所有条件。唯一的另一种选择是使用很多else-if,我不会推荐。
如果你真的想隐藏条件逻辑,你可以创建一个函数(我想让代码更具可读性吗?),如下所示:
bool checkTheValues(int i, int j, int k /*etc*/)
{
if((i>8&&j>8)||j<i /*or whatever*/)
return true
return false;
}
然后:
if(checkTheValues(i, j, k))
{
//do something
}
答案 1 :(得分:0)
#define Less(i, j, n) (i<n && j<n)
#define More(i, j, n) (i>n && j>n)
int main()
{
if(More(i, j, 8) || Less(i, j, 0))
// Do stuff
}
您可以推断上面的示例以适合您想要的任何内容
答案 2 :(得分:0)
使用提升宏
#include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/tuple/to_seq.hpp>
#include <boost/preprocessor/seq/for_each_i.hpp>
#include <boost/preprocessor/control/if.hpp>
#define F(r, data, i, elem) BOOST_PP_IF(i, BOOST_PP_TUPLE_ELEM(2, 0, data), ) (elem BOOST_PP_TUPLE_ELEM(2, 1, data))
#define all(cond, ...) (BOOST_PP_SEQ_FOR_EACH_I(F, (&&, cond) , BOOST_PP_TUPLE_TO_SEQ((__VA_ARGS__)) ))
if(all(>8, i, j) || all(<0, i, j))//expand to if(( (i >8) && (j >8) ) || ( (i <0) && (j <0) ))