Я знаю, что параметры могут быть добавлены при инициализации экземпляра fstream, например:
fstream file("filename.txt", ios::in | ios::out | ios::binary);
В этом случае есть 3 варианта.
У меня есть несколько вопросов:
Как мне реализовать это в моей собственной функции?
Сделай это тип битовой маски:
Тип битовой маски поддерживает конечное число элементов битовой маски, которые являются различными ненулевыми значениями типа битовой маски, так что для любой пары
Ci
а такжеCj
,Ci & Ci != 0
а такжеCi & Cj == 0
, Кроме того, значение0
используется для представления пустой битовой маски без установленных значений.
Должен ли я определить какие-либо значения const или макросы?
Значения обычно являются константами, представляющими последовательные степени двух, то есть 1, 2, 4, 8, 16 и т. Д.
Как разобрать варианты и правильно с ними разобраться?
Вам никогда не нужно «разбирать» эти параметры — все, что вам нужно сделать, это проверить, присутствует ли данный параметр или нет. Вы можете сделать это с &
оператор:
openmode x = ios::in | ios::out;
if (x & ios::in) {
... // TRUE
}
if (x && ios::binary) {
... // False
}
Это битовые маски.
Как мне реализовать это в моей собственной функции?
Должен ли я определить какие-либо значения const или Маркос?
Нет необходимости в макросах. Я предпочитаю перечисления:
namespace options {
enum options_enum : unsigned {
in = (1u << 0),
out = (1u << 1),
binary = (1u << 2),
whatever = (1u << 3),
};
};
Как разобрать варианты и правильно с ними разобраться?
По маскировке:
bool in = option_argument & options::in;