结构元素的枚举 C++
Enumeration of struct elements c++
我只是想用 C++ 创建几个结构元素的枚举(实际上它可能看起来更像 C,所以如果你有任何建议让它看起来更像 C++,我会采纳)。这是代码:
struct Vect
{
int x;
int y;
};
enum Direction
{
right = (Vect) {1, 0},
left = (Vect) {-1, 0},
down = (Vect) {0, 1},
up = (Vect) {0, -1}
};
我从 g++ 得到的错误是:"enumerator value for ‘right’ is not an integer constant"(其他错误也是如此)。甚至可以这样做吗?否则我可以找到另一种方法来做到这一点,但我发现这个解决方案非常优雅。
如果你想要的只是一堆Vect
类型的常量表达式,你可以这样定义它们:
namespace Direction
{
constexpr Vect right = { 1, 0 };
constexpr Vect left = {-1, 0 };
constexpr Vect down = { 0, 1 };
constexpr Vect up = { 0, -1 };
}
Vect
如您所见,它是一种文字类型,这就是它成为可能的原因。几乎就是为什么要引入 constexpr
。
我只是想用 C++ 创建几个结构元素的枚举(实际上它可能看起来更像 C,所以如果你有任何建议让它看起来更像 C++,我会采纳)。这是代码:
struct Vect
{
int x;
int y;
};
enum Direction
{
right = (Vect) {1, 0},
left = (Vect) {-1, 0},
down = (Vect) {0, 1},
up = (Vect) {0, -1}
};
我从 g++ 得到的错误是:"enumerator value for ‘right’ is not an integer constant"(其他错误也是如此)。甚至可以这样做吗?否则我可以找到另一种方法来做到这一点,但我发现这个解决方案非常优雅。
如果你想要的只是一堆Vect
类型的常量表达式,你可以这样定义它们:
namespace Direction
{
constexpr Vect right = { 1, 0 };
constexpr Vect left = {-1, 0 };
constexpr Vect down = { 0, 1 };
constexpr Vect up = { 0, -1 };
}
Vect
如您所见,它是一种文字类型,这就是它成为可能的原因。几乎就是为什么要引入 constexpr
。