编写多个 If 语句的优雅方式
Elegant way to write multiple If statements
我有以下多个'if'语句。
动物和人类是两个enum
。
Var a, b;
int c, d, e = 0;
if (a == Humans ::Men) {
c = 1;
}
if (b == Animals ::Cat) {
d= 1;
e= 1;
}
if (b == Animals ::Dog) {
d = 1;
}
if (b == Animals ::Elephant) {
e = 1;
}
我怎么能把所有东西都写在一个语句里,这样意思还是一样。
提前谢谢。
您可以使用
特定值设置enum
,以便可以屏蔽。(Men
、Cat
、Dog
、Element
只有一个但唯一的位集(。具有掩码值的按位枚举器很常见。
然后你可以写
if (b & Animals::d_applies){
d = 1;
}
至少,d_applies
在哪里Animals::Cat | Animals::Dog
只要有可能,我发现某种基于表格的方法是最容易扩展的。我将用std::map
演示,但您可以使用其他类型的簿记数据结构。只需定义从可能的枚举值对到要分配给变量的值的三元组的映射:
using from_type = std::tuple<Humans, Animals>;
using to_type = std::tuple<int, int, int>;
std::map<from_type, to_type> value_getter {
{ from_type{Humans::Men, Animals::Cat}, to_type{0, 1, 1} },
// etc.
};
int c, d, e;
std::tie(c, d, e) = value_getter[from_type{a, b}];
或者,如果您觉得很花哨,并且您的编译器已经可以正确支持 C++17,则可以将同一映射与结构化绑定一起使用:
auto [c, d, e] = value_getter[from_type{a, b}];
所以现在初始化是声明的一部分,并且是很好的有益健康的C++。
您可以安排一个包含"谓词,处理程序"等对的容器。然后,您可以迭代容器,并在相应的谓词匹配时调用处理程序。std::for_each 在所有设置代码完成后,这里的单行代码会很好。
附言但是,不确定它是否值得一颗子弹。
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 我的简单if-else语句是如何无法访问的代码
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 为什么是0;C++中的有效语句
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- Insert函数不适用于2 if语句C++
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- If语句未被求值C++
- 而不是那么多的 if 语句,我想要一个逻辑,我可以用一个语句或优化的方式来完成
- 我如何在一个 if 语句中声明所有数字我尝试通过其他方式声明所有数字,如果一个接一个,但似乎代码有逻辑错误
- 有没有一种优雅的方式来遍历 Clang AST 语句
- 编写多个 If 语句的优雅方式
- 如何强制 GCC 以线性方式转换易失性内联程序集语句
- 以一种方式使用字符串选择(如果语句)
- 是否可以以编程方式将 SQLite 数据库转换为 C/C++ 中的 SQL 语句
- 实现此switch语句的更智能的方式
- 在C++中实现sql语句绑定的最佳方式