带有参数的C++转换运算符

C++ conversion operator with parameter

本文关键字:转换 运算符 C++ 参数      更新时间:2023-10-16

有什么方法可以定义接受参数的转换运算符吗?

这是我的用例:

class RGBColor
{
    operator RGBAColor (const float alpha = 1.0) const noexcept;
}

我有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;
    }
};