c++ - 结构成员的限制值

标签 c++ c++11

<分区>

我想创建一个简单的结构来存储颜色的 RGB 值。 r、g 和 b 应该是 [0,1] 中的双数。

struct Color 
{
  Color(double x): r{x}, g{x}, b{x} {
    if (r < 0.0) r = 0.0;
    if (r > 1.0) r = 1.0;
    if (g < 0.0) g = 0.0;
    if (g > 1.0) g = 1.0;
    if (b < 0.0) b = 0.0;
    if (b > 1.0) b = 1.0;
  }
}

有没有比使用这些 if 语句更好的方法?

最佳答案

只需编写一个函数来钳制:

double clamp(double val, double left = 0.0, double right = 1.0) {
    return std::min(std::max(val, left), right);
}

并在你的构造函数中使用它:

Color(double x)
    : r{clamp(x)}
    , g{clamp(x)}
    , b{clamp(x)} 
{ }

关于c++ - 结构成员的限制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016062/

相关文章:

c++ - 进行依赖注入(inject)时公开私有(private)方法

c++ - 列表框选择事件(LBN_SELCHANGE 和 LBN_DBLCLK)未触发

c++ - 从成员地址推导结构模板类型

c++ - 运行时检查失败 #2 - 变量 'projectAverage' 周围的堆栈已损坏

c++ - 如何在运行时更改 .exe 的名称

c++ - 是否为派生类生成移动构造函数/赋值运算符

c++ - 删除 [] 时发生堆损坏错误

c++ - =delete 有哪些用途?

c++ - dllexport 私有(private)实现的纯虚拟类不起作用?

c++ - const auto * 和 const auto 之间的区别?