混淆(* this)指针的强制转换

时间:2013-03-15 00:39:26

标签: c++ casting ros

这是Transform类中ROS(link)中的Transform.h代码。

/**@brief Return the transform of the vector */
TFSIMD_FORCE_INLINE Vector3 operator*(const Vector3& x) const
{
    return (*this)(x);
}

有人可以解释这段代码在做什么吗?这是我的想法(对于上下文,我有几年的C程序员经验,第一次用C ++开发。)

调用以下函数时调用该函数

object_of_type_Transform * object_of_type_Vector3

然后它将Vector3对象转换为Transform对象并返回结果(我不清楚这是如何实现的,因为这两种类型似乎不兼容)。

但是返回的结果是Vector3 ......这就是我的心理模型崩溃的地方。

此外,该函数应该是基于Transform类转换Vector3点...所以我的理解肯定在某处有缺陷。

我很感激任何见解。

由于

修改

感谢您的回复!上面的功能是:

/**@brief Return the transform of the vector */
TFSIMD_FORCE_INLINE Vector3 operator()(const Vector3& x) const
{
    return Vector3(m_basis[0].dot(x) + m_origin.x(), 
    m_basis[1].dot(x) + m_origin.y(), 
    m_basis[2].dot(x) + m_origin.z());
}

/**@brief Return the transform of the vector */
TFSIMD_FORCE_INLINE Vector3 operator*(const Vector3& x) const
{
    return (*this)(x);
}

我明白了,现在,我们还在继续。再次感谢。

1 个答案:

答案 0 :(得分:7)

  

然后将Vector3对象转换为Transform对象并将其作为结果返回

没有。没有演员表演;这样:

return (*this)(x);

相当于:

return this->operator()(x);

在这两种情况下,代码都在调用Transform::operator()并将x传递给它。第一个代码中的括号是必要的,因为()绑定比*更强,因此如果*this周围没有括号,则代码将等同于return *(this(x)); - 编译错误。

顺便说一句,这是非常惯用的C ++代码,但我可以看到语法如何让C程序员感到困惑(毕竟,你不能重载运算符,更不用说operator())。