带有参数的C++转换运算符
C++ conversion operator with parameter
有什么方法可以定义接受参数的转换运算符吗?
这是我的用例:
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;
}
};
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 构造函数和转换运算符之间的重载解析
- 分配给转换运算符失败-C++
- 转换运算符不适用于sleep_until
- 继承模板化转换运算符
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 如何在模板化转换运算符中消除此构造的歧义?
- 为什么选择转换运算符的重载?
- 如何避免强制转换运算符 () 和访问运算符 [] 冲突?
- 如果可能的话,C++总是更喜欢右值引用转换运算符而不是常量左值引用吗?
- 了解转换运算符的选择C++
- 多个隐式转换运算符
- 这个typedef和转换运算符语法是什么意思
- 为什么转换运算符调用复制构造函数两次,而等效函数只调用它一次
- 类模板忽略了用户定义的转换运算符(非模板不忽略)
- 为什么在std::for_each()返回时调用转换运算符
- 为什么 std::optional 的强制转换运算符被忽略了
- 使用用户定义的转换运算符推导函数模板参数
- 模板转换运算符的分辨率不明确
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?