-2

有没有办法定义一个带参数的转换运算符?

这是我的用例:

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++ 转换,所以我只是想知道是否有任何方法可以使用带参数的转换运算符。

4

2 回答 2

4

这实际上就是构造函数的用途。

声明并定义一个。

于 2016-05-04T23:54:07.800 回答
3

无法将其他参数传递给强制转换运算符。语法不允许这样做。

如评论和其他答案中所述,请提供适当的构造函数:

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;
    }
};
于 2016-05-05T00:33:53.847 回答