我知道在初始化 fstream 的实例时可以添加选项,例如:
fstream file("filename.txt", ios::in | ios::out | ios::binary);
在这种情况下,有 3 个选项。我有几个问题:
- 我应该如何在我自己的函数中实现它?
- 我应该定义任何 const 值或 marcos 吗?
- 如何解析选项并正确处理它们?
我应该如何在我自己的函数中实现它?
使其成为位掩码类型:
位掩码类型支持有限数量的位掩码元素,这些元素是位掩码类型的不同非零值,因此对于任何对
Ci
和Cj
和。此外,该值用于表示一个空位掩码,没有设置任何值。Ci & Ci != 0
Ci & Cj == 0
0
我应该定义任何 const 值或宏吗?
这些值通常是表示 2 的连续幂的常数,即 1、2、4、8、16 等。
如何解析选项并正确处理它们?
您永远不需要“解析”这些选项 - 您需要做的就是检查给定选项是否存在。您可以使用&
操作员来做到这一点:
openmode x = ios::in | ios::out;
if (x & ios::in) {
... // TRUE
}
if (x && ios::binary) {
... // False
}
这些是位掩码。
我应该如何在我自己的函数中实现它?
我应该定义任何 const 值或 marcos 吗?
不需要宏。我更喜欢枚举:
namespace options {
enum options_enum : unsigned {
in = (1u << 0),
out = (1u << 1),
binary = (1u << 2),
whatever = (1u << 3),
};
};
如何解析选项并正确处理它们?
通过屏蔽:
bool in = option_argument & options::in;