带参数的 C++ 转换运算符
C++ conversion operator with parameter
有什么方法可以定义带参数的转换运算符吗?
这是我的用例:
class RGBColor
{
operator RGBAColor (const float alpha = 1.0) const noexcept;
}
我有转换运算符 to/from HSB 和 RGB 颜色,以及 RGBA 到 RGB(通过降低 alpha),但我很难从 RGB 转换到 RGBA,因为我需要能够提供alpha 作为参数(而不是总是默认为一个)。
我假设我将不得不退回到类似的东西:
RGBAColor ToRGBAColor (const float alpha = 1.0) const noexcept;
但是,我更愿意使用标准的 C++ 转换,所以我想知道是否有任何方法可以使用带参数的转换运算符。
这就是构造函数的真正用途。
声明并定义一个。
无法将附加参数传递给强制转换运算符。语法不允许这样做。
如评论和其他答案中所述,请改为提供适当的构造函数:
struct RGB {
float r_;
float g_;
float b_;
};
struct RGBA : RGB {
float alpha_;
RGBA(const RGB& rgb) : RGB(rgb), alpha_(1.0) {}
RGBA(const RGB& rgb, float alpha) : RGB(rgb), alpha_(alpha) {} // <<<<
RGBA& operator=(const RGB& rgb) {
*static_cast<RGB*>(this) = rgb;
alpha_ = 1.0;
return *this;
}
};
有什么方法可以定义带参数的转换运算符吗?
这是我的用例:
class RGBColor
{
operator RGBAColor (const float alpha = 1.0) const noexcept;
}
我有转换运算符 to/from HSB 和 RGB 颜色,以及 RGBA 到 RGB(通过降低 alpha),但我很难从 RGB 转换到 RGBA,因为我需要能够提供alpha 作为参数(而不是总是默认为一个)。
我假设我将不得不退回到类似的东西:
RGBAColor ToRGBAColor (const float alpha = 1.0) const noexcept;
但是,我更愿意使用标准的 C++ 转换,所以我想知道是否有任何方法可以使用带参数的转换运算符。
这就是构造函数的真正用途。
声明并定义一个。
无法将附加参数传递给强制转换运算符。语法不允许这样做。
如评论和其他答案中所述,请改为提供适当的构造函数:
struct RGB {
float r_;
float g_;
float b_;
};
struct RGBA : RGB {
float alpha_;
RGBA(const RGB& rgb) : RGB(rgb), alpha_(1.0) {}
RGBA(const RGB& rgb, float alpha) : RGB(rgb), alpha_(alpha) {} // <<<<
RGBA& operator=(const RGB& rgb) {
*static_cast<RGB*>(this) = rgb;
alpha_ = 1.0;
return *this;
}
};