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
效果很好。
我正在制作一个 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
效果很好。