这是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);
}
我明白了,现在,我们还在继续。再次感谢。
答案 0 :(得分:7)
然后将Vector3对象转换为Transform对象并将其作为结果返回
没有。没有演员表演;这样:
return (*this)(x);
相当于:
return this->operator()(x);
在这两种情况下,代码都在调用Transform::operator()
并将x
传递给它。第一个代码中的括号是必要的,因为()
绑定比*
更强,因此如果*this
周围没有括号,则代码将等同于return *(this(x));
- 编译错误。
顺便说一句,这是非常惯用的C ++代码,但我可以看到语法如何让C程序员感到困惑(毕竟,你不能重载运算符,更不用说operator()
)。