【问题标题】:Implicit conversion from class to double从 class 到 double 的隐式转换
【发布时间】:2017-10-12 23:55:53
【问题描述】:

是否可以将给定的类隐式转换为原始类型?特别是双倍。

如果我有课:

class Angle
{
    double value;

    Angle(double init_value = 0.0) : value(init_value) {}

    double get_value() const {return (value);}
}

无论如何,我是否可以调用一个函数,例如 std::sin(),并提供一个 Angle 类的对象,而无需在每次调用时显式获取 angle 的值?例如:

Angle theta(180.0);
double result = std::sin(theta);

不必通过以下方式调用 std::sin:

Angle theta(180.0);
double result = std::sin(theta.get_value());

如果有一种方法可以实现这种所需的功能,我会假设它是通过赋值运算符的运算符重载。或者也许通过巧妙的方式定义移动/复制构造函数?

感谢您提供任何见解。

【问题讨论】:

  • 你可以自己犯下Angle 例如double sin(Angle a) { return std::sin(a.get_value());}
  • 这是我到目前为止一直在做的事情,但是如果需要对每个需要双精度类型转换的函数都这样做,这可能会变得很麻烦。

标签: c++ casting type-conversion double operator-overloading


【解决方案1】:

在类定义中,您可以定义转换运算符。例如

class Angle
{
    //...
    operator double() const { return get_value(); }
};

【讨论】:

  • 感谢您的建议!这是否需要调用 theta() 而不仅仅是 theta 来执行到 double 类型的转换?
  • @user7119460 正如您在问题中所写,您可以在以下代码中使用它 sn-p Angle theta(180.0);双倍结果 = std::sin(theta);
  • 太棒了!非常感谢。
猜你喜欢
  • 2010-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多