C++ 在C+中用逻辑OR(";|quot;)分隔选项+;
我知道初始化fstream实例时可以添加选项,例如:C++ 在C+中用逻辑OR(";|quot;)分隔选项+;,c++,bitflags,C++,Bitflags,我知道初始化fstream实例时可以添加选项,例如: fstream file("filename.txt", ios::in | ios::out | ios::binary); 在这种情况下,有3个选项。 我有几个问题: 我应该如何在自己的功能中实现这一点 我应该定义常量值还是marcos 如何解析选项并正确处理它们 我应该如何在自己的功能中实现这一点 让它成为一个: 位掩码类型支持有限数量的位掩码元素,这些元素是位掩码类型的不同非零值,因此,对于任何对Ci和Cj,Ci&Ci!=0和Ci&
fstream file("filename.txt", ios::in | ios::out | ios::binary);
在这种情况下,有3个选项。
我有几个问题:
Ci
和Cj
,Ci&Ci!=0
和Ci&Cj==0
。此外,值0
用于表示未设置值的空位掩码
我应该定义常量值或宏吗 这些值通常是表示两个连续幂的常数,即1、2、4、8、16等 如何解析选项并正确处理它们 你永远不需要“解析”这些选项——你所需要做的就是检查给定的选项是否存在。您可以使用
&
运算符执行此操作:
openmode x = ios::in | ios::out;
if (x & ios::in) {
... // TRUE
}
if (x && ios::binary) {
... // False
}
我应该如何在自己的功能中实现这一点
让它成为一个:
位掩码类型支持有限数量的位掩码元素,这些元素是位掩码类型的不同非零值,因此,对于任何对Ci
和Cj
,Ci&Ci!=0
和Ci&Cj==0
。此外,值0
用于表示未设置值的空位掩码
我应该定义常量值或宏吗 这些值通常是表示两个连续幂的常数,即1、2、4、8、16等 如何解析选项并正确处理它们 你永远不需要“解析”这些选项——你所需要做的就是检查给定的选项是否存在。您可以使用
&
运算符执行此操作:
openmode x = ios::in | ios::out;
if (x & ios::in) {
... // TRUE
}
if (x && ios::binary) {
... // False
}
这些是比特面具
我应该如何在自己的功能中实现这一点
我应该定义常量值还是marcos
不需要宏。我更喜欢枚举:
namespace options {
enum options_enum : unsigned {
in = (1u << 0),
out = (1u << 1),
binary = (1u << 2),
whatever = (1u << 3),
};
};
这些是比特面具
我应该如何在自己的功能中实现这一点
我应该定义常量值还是marcos
不需要宏。我更喜欢枚举:
namespace options {
enum options_enum : unsigned {
in = (1u << 0),
out = (1u << 1),
binary = (1u << 2),
whatever = (1u << 3),
};
};
位掩码是您正在搜索的单词。|
不是逻辑OR。这是一件完全不同的事情。但是,这是您需要的。位掩码是您正在搜索的单词。
不是逻辑OR。这是一件完全不同的事情。但这些都是你需要的。