gpt4 book ai didi

c++ - 将预定义颜色添加到简单的 C++ 颜色类

转载 作者:行者123 更新时间:2023-11-28 01:47:55 27 4
gpt4 key购买 nike

我需要为具有 RGBA 值的小型应用程序编写一个 Color 类。我在想有这样的东西:

class Color
{
public:
Color(int red, int green, int blue);
// stuff

private:
int m_red;
int m_green;
int m_blue;
int m_alpha;
};

我想添加使用几种预定义颜色的可能性。我见过某人的例子using static constants to do this ,但我一直听说它们不是好的做法,因为它们会污染应用程序并可能导致测试出现问题。我想知道您认为什么是最好的方法,为什么。

问候

最佳答案

虽然我认为这个问题将以主要基于意见的方式结束,但我会提出我的意见。

据我所知,要避免使用静态常量的主要原因是,如果您在内联定义它们并且需要通过引用来获取它们,那么您可能会遇到链接器错误。参见 this .由于这不是整数类型,因此您要么必须创建类 constexpr 并内联定义静态常量(在类之外),要么在实现文件中的类之外定义它们。任何一种方式都需要一个实现文件(内联 constexpr 常量版本是会导致链接器错误的版本)。

我更愿意制作这样一个简单的类 constexpr 并将预定义颜色定义为静态 constexpr 函数:

struct Color
{
static constexpr Color red() { return Color(255, 0, 0); }
static constexpr Color green() { return Color(0, 255, 0); }
static constexpr Color blue() { return Color(0, 0, 255); }
static constexpr Color black() { return Color(0, 0, 0); }
static constexpr Color white() { return Color(255, 255, 255); }

constexpr Color(uint8_t r, uint8_t g, uint8_t b, uint8_t a = 255)
: r(r), g(g), b(b), a(a)
{}

uint8_t r;
uint8_t g;
uint8_t b;
uint8_t a;
};

void do_something_with_color(const Color& color)
{
printf("worked\n");
}

int main()
{
do_something_with_color(Color::red());
return 0;
}

作为旁注,这是您真正处理结构的时候之一。类型的公共(public)接口(interface)它的组件,所以它们应该是公共(public)的。这种基于函数的方法没有性能损失,避免了可能的链接器错误,并且在我看来更加灵活和清晰。

关于c++ - 将预定义颜色添加到简单的 C++ 颜色类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44124022/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com