我有一些来自c-code的typedef'd枚举,也就是说,它们在下面的形式中可用
typedef enum {FOO=3, BAR=5} my_enum; 我想以一种类型安全的方式在C++代码中使用它,同时保持enum名称(FOO和BAR)、值(3和5)及其关联不变。
在C++11或更高版本中,有没有可以推荐的最佳实践或模式,比如模板包装器?
发布于 2020-01-28 19:14:41
在C++11以后的版本中,您可以将这些类型声明为枚举,以获得类型安全性,但您必须使用enum class的名称来限定使用。
enum class my_enum {
FOO=3,
BAR=5
};
void my_func(my_enum e) {
}
int main() {
my_enum test_enum = my_enum::FOO;
my_func(test_enum);
}如果我们将上面的test_enum定义改为my_enum test_enum = FOO;,我们会得到错误:
13:23: error: 'FOO' was not declared in this scope
发布于 2020-01-28 20:24:24
它看起来像是一个
using声明可以工作;至少可以编译以下代码:
#include <iostream>
typedef enum{A=0, B=1, C=2} my_enum;
typedef enum{H=0, I=1, J=2} your_enum;
using namespace std;
using my_wrapper = my_enum;
using your_wrapper = your_enum;
int g(my_wrapper w)
{
return (int)w-10;
}
int g(your_wrapper w)
{
return (int)w+10;
}
int main() {
my_wrapper b=my_wrapper::B;
your_wrapper j=your_wrapper::J;
cout << g(b) << "\n";
cout << g(j) << "\n";
}https://stackoverflow.com/questions/59945987
复制相似问题