繁体   English   中英

静态类常量与常量名称空间

[英]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::REDColor::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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM