C++ 在C+中用逻辑OR(";|quot;)分隔选项+;

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实例时可以添加选项,例如:

fstream file("filename.txt", ios::in | ios::out | ios::binary);
在这种情况下,有3个选项。 我有几个问题:

  • 我应该如何在自己的功能中实现这一点
  • 我应该定义常量值还是marcos
  • 如何解析选项并正确处理它们
  • 我应该如何在自己的功能中实现这一点

    让它成为一个:

    位掩码类型支持有限数量的位掩码元素,这些元素是位掩码类型的不同非零值,因此,对于任何对
    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。这是一件完全不同的事情。但这些都是你需要的。