首页 > 解决方案 > 如何以最优雅的 c++ 方式设计一个已经预定义标准颜色的颜色类?

问题描述

如何以现代优雅的 C++ 方式设计一个已经预定义标准颜色的 Color 类?我想知道一个最小的示例设计,而不是一个完整的颜色类。

我有基本的颜色类:

class Colour
{
    public:
    double rgb[3];
};

现在我可以通过以下方式使用它:

Colour c1 = {1.0, 0.0, 0.0}, c2 = {1.0, 1.0, 0.0};

但由于已经有我们非常常用的标准颜色,我们总是喜欢使用类似以下的颜色:

Colour c1 = Colour::Red, c2 = Colour::Yellow;

如何实现上述目标?

提前谢谢。

标签: c++classdesign-patterns

解决方案


通过稍微不同的语法,您可以使用静态成员函数:

struct Colour {
    double rgb[3];

    static constexpr Colour Red() {
        return {1, 0, 0};
    }
};

auto red = Colour::Red();

或者,您可以将标准颜色放入一个特殊的命名空间:

namespace Colours {
    inline constexpr auto Red = Colour{1, 0, 0};
}

auto red = Colours::Red;

推荐阅读