(对this one的跟进问题)
我正在编写一个使用库的程序,其头文件定义了
enum foo : unsigned { first_foo, second_foo };
现在,我想为foo
值添加一些别名。如果我控制了图书馆的资源,我会写:
enum foo : unsigned {
first_foo,
second_foo,
best_foo = first_foo,
worst_foo = second_foo,
oldest_foo = first_foo,
newest_foo = second_foo;
};
...但我不能控制来源。所以,我本来想写:
enum bar : foo {
best_foo = first_foo,
worst_foo = second_foo,
oldest_foo = first_foo,
newest_foo = second_foo;
};
但这是无效的C ++,因为foo不是整数类型。如果我尝试解决它并使用基础类型:
enum bar : std::underlying_type<foo> { /* etc. etc. */ }
它编译,但后来 - 我没有获得foo类型的值,并且我收到有关bar
和foo
&s之间比较的编译器警告
我可以使用static const
变量:
static const auto best_foo = first_foo;
static const auto worst_foo = second_foo,
static const auto oldest_foo = first_foo,
static const auto newest_foo = second_foo;
但我不想让他们冒险进入文字部分或符号表。
那么,我该怎么办?
答案 0 :(得分:0)
你可以完全单独定义enum bar
,然后重载bar和foo的一元+
运算符以返回foo:
constexpr foo operator + ( bar const input )
{
return static_cast <foo> ( input );
}
constexpr foo operator + ( foo const input )
{
return input;
}