在C+中,有没有一种方法可以在这个类名称空间中定义某个类的全局常量+;? 想象一下我有一个C++结构叫做颜色< /p> struct Color { float r,g,b; };

在C+中,有没有一种方法可以在这个类名称空间中定义某个类的全局常量+;? 想象一下我有一个C++结构叫做颜色< /p> struct Color { float r,g,b; };,c++,C++,以及一个接受颜色对象并对其执行操作的函数: void func(const Color & color) {...} 通常,我使用动态构造的颜色对象调用此函数: func(Color{0.1,0.2,0.3}); 但我经常使用某些颜色,例如黑色、白色和红色。所以我发现自己经常这样做: func(Color{0.0,0.0,0.0}); // black func(Color{1.0,1.0,1.0}); // white func(Color{1.0,0.0,0.0}); // re

以及一个接受颜色对象并对其执行操作的函数:

void func(const Color & color) {...}
通常,我使用动态构造的颜色对象调用此函数:

func(Color{0.1,0.2,0.3});
但我经常使用某些颜色,例如黑色、白色和红色。所以我发现自己经常这样做:

func(Color{0.0,0.0,0.0}); // black
func(Color{1.0,1.0,1.0}); // white
func(Color{1.0,0.0,0.0}); // red
我想做的是

func(Color::black);
func(Color::white);
func(Color::red);
因此,我正在寻找一种在颜色名称空间中定义Color类型的全局常量的方法。到目前为止,我已经尝试了以下两种选择:

选项1:定义与结构同名的命名空间;由于名称空间冲突,无法工作

struct Color {
    float r,g,b;
};

namespace Color {
    const Color black{0.0,0.0,0.0};
    const Color white{1.0,1.0,1.0};
    const Color red{1.0,0.0,0.0};
}
选项2:结构定义内的静态变量;不起作用,因为这使结构定义不完整

// static members
struct Color {
    float r,g,b;

    static Color red = Color{1.0,0.0,0.0};
};

有没有办法实现我想要的,或者至少是类似的东西?

当然有可能。你有什么特别的问题?你想做什么?链接器错误?最好使用不同的名称,如
名称空间预定义颜色
。。。它使代码更容易理解,对于Intellisense等工具更友好。
struct Color {
    float r, g, b;

    static const Color red;
};

constexpr Color Color::red{1.0,0.0,0.0};