我正在尝试创建一种可以存储 int、double 或 uint 的类型,如下所示:
struct Value
{
/*...*/
Value& operator=(const int value) { /*...*/ }
Value& operator=(const double value) { /*...*/ }
Value& operator=(const uint value) { /*...*/ }
operator int() const { /*...*/ }
operator double() const { /*...*/ }
operator uint() const { /*...*/ }
}
当我尝试使用它时,我得到了关于“推断冲突类型”的错误。我在某处读到“演绎指南”可以提供帮助,但它似乎需要模板。我的类型不需要模板。
有没有一种解决方案可以使用这种 Value 类型,而无需每次都将其转换为 int、double 或 uint?
Value v;
v=123;
// I would like to type:
std::clamp(v,0,1234); // error
// But I need to type:
std::clamp(int(v),0,1234); // ok
我对操作员也有同样的问题(有不同的错误消息)
int x=v+12;
我想我应该添加更多的运算符重载,但我没有找到哪一个。