【问题标题】:Static cast in a template模板中的静态转换
【发布时间】:2013-01-15 11:32:24
【问题描述】:

我有一个带有这个静态转换运算符的模板:

operator Vector2<float>() const
{
    return Vector2<float>(x, y);
}

这对我来说意味着如果我转换为浮点数,它将返回该类的浮点变体,即使 xy 是来自整数变体的整数。但显然不是这样:

作为测试:

Vector2<float>position=static_cast<float>(Vector2<int>(5,5));

我收到编译器错误 *No matching conversion for static_cast from Vector2 to float*。

然而,转换是上面指定的,不是静态转换重载吗?

【问题讨论】:

  • 我在任何地方都没有看到operator float() const
  • 这意味着如果你想将你的对象转换为Vector2&lt;float&gt;,你可以。直接投射到float 与此无关。
  • 这种隐式转换非常邪恶。至少让它成为一个命名操作。当一个人不明白发生了什么事情时,要求在幕后默默地做事情真的不是一个好主意。

标签: c++


【解决方案1】:

你应该这样使用它:

Vector2<float> position = static_cast<Vector2<float>>(Vector2<int>(5,5));

由于声明指定转换为Vector2&lt;float&gt;,而不是转换为float

【讨论】:

  • 啊,谢谢,这是我的代码中的一个错字,我的眼睛一直在掩饰。非常感谢
猜你喜欢
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 2020-12-19
  • 1970-01-01
  • 2019-04-19
  • 2012-03-02
相关资源
最近更新 更多