我在用C ++ 11编译时有这个:
class A{
const uint32_t X = 5;
typedef std::array<B, X> ARRAY;
};
我收到错误消息
无效使用非静态数据成员。
我不想让这个静态,因为我有一些动态链接问题由于这个而且我不想使用初始化列表因为我希望这些“魔术数字”非常清楚顶部报头中。
答案 0 :(得分:4)
非常这样做的老式方法是#DEFINE X 5;
除非他们在代码审查会议中想要一记耳光,否则没有人再使用它了。强>
完全这种老式的方法是使用enum {X = 5};
在我看来这是最好的C ++之前的方式。
现代这样做的方法是使用static constexpr uint32_t X = 5;
所有这些方式确保X
编译时可评估。
答案 1 :(得分:0)
另一种方法是
class A{
enum Array_Size : uint32_t { X = 5 };
typedef std::array<B, X> ARRAY;
};