3

这是 Transform 类中 ROS(链接)中 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);
}

我明白了,现在,发生了什么事。再次感谢。

4

1 回答 1

7

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

没有。没有演员阵容;这:

return (*this)(x);

相当于:

return this->operator()(x);

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

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

于 2013-03-15T00:42:01.630 回答