class 命名空间中的 C++ public 枚举

C++ public enum in namespace of class

我正在制作一个 class,我想在 class 中创建一个枚举,以便只能通过 class 的命名空间访问它。我希望用户能够像这样访问 class 之外的枚举:

GpioPin pin(23, GpioPin::OUTPUT);

其中 GpioPin 是 class,OUTPUT 是枚举值之一。

我试着把枚举放在 class 的顶部,我试着把它放在 public 标签下,比如(包括用于帮助调试的构造函数):

public:
    enum pin_dir {
        INPUT,
        OUTPUT,
    };

    GpioPin(int pin_num, pin_dir dir): pin_num(pin_num), dir(dir) {
        std::string dir_str; 
        if(dir == INPUT){
            dir_str = "in";
        } else if (dir == OUTPUT){
            dir_str = "out";
        } else {
            std::cout << "invalid direction in constructor for pin " << pin_num << std::endl;
            return;
        }

        init_gpio_pin(pin_num, dir_str.c_str());
    }

但是当在 public 标签下时,构造函数的行为就像枚举不存在并抛出编译器错误。

有谁知道这样做的正确方法吗?

谢谢

编辑:问题已解决。此处描述的代码是正确的并且可以按预期工作。接受的答案提供了一些关于 C++

中枚举 class 的有用信息

查看枚举 class(google for c++ 枚举 class)。

Class Foo {
public:
    enum class Color{ Red, Green, Blue};
};

然后,您将事物引用为:

Foo::Color::Red

效果很好。