[英]static class constants vs namespace of constants
假设您想使用类的通用名称来实例化“特殊”案例。 让我们以下面定义的Color类为例:
struct Color {
float r, g, b;
constexpr Color(float r, float g, float b) : r(r), g(g), b(b) {}
};
想象一下我们想以某种有组织的方式定义常量,例如“ RED”,“ BLUE”等。我碰到了这两种定义它们的方式:
1)作为Color类内部的静态常量,例如Color::RED
, Color::GREEN
2)在命名为类的复数形式的名称空间中:
namespace Colors{
constexpr Color RED(1, 0, 0);
/* ETC */
}
因此它们以Colors::RED
Colors::BLUE
...
我发现第二个更易于维护,因为每个元素仅需要一个定义,而第一个则需要两个声明,一个在类内部,另一个在类外部。 但是我不确定它的正确性。
简而言之:我在问第二个方法是否正确,或者我应该选择第一个方法还是其他方法。 我指的不是编译,而是编译。 我说的是好的设计规范。
这完全取决于您。
就个人而言,我不需要每次添加新的“预设”时都必须更改类定义。 因此,除非类的实现本身需要这些常量,否则我将其排除在外。
但是,您不能将名称空间作为模板参数传递,因此有时(在更为复杂的情况下)您会被类“卡住”。 仍然不必是Color
类。
第一个需要两个声明,一个在类内,另一个在类外
从C ++ 17开始,这不再是事实。 我们有inline
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.