c++ - 具有 x、y、z 的点和具有 x()、y()、z() 的点的模板函数

标签 c++ templates eigen point-cloud-library

我经常使用点云,因此我使用了很多 PCL 和 Eigen 库。 PCL 中的点有 .x .y 和 .z 公共(public)成员。 Eigen 中的点有 .x() .y() 和 .z()

我经常发现自己为一种点类型编写一个函数,然后通过创建一个临时点来调用它以从一种类型转换为另一种类型:

例如

void f(const Eigen::Vector3d &p) { ... }
pcl::PointXYZ p;
f(Eigen::Vector3d(p.x, p.y, p.z);

为了使问题更加复杂,PCL 点有多种类型:XYZ、XYZRGB、XYZN 等(请参阅 http://pointclouds.org/documentation/tutorials/adding_custom_ptype.php),特征向量也有多种类型:用于 double 的 Vector3d 和用于 float 的 Vecto3f,两者都是矩阵类型的特化(参见 http://eigen.tuxfamily.org/dox/group__matrixtypedefs.html )

我想知道是否可以调用一些模板专门化魔法咒语来避免这种情况,即它会检测点类型是否具有 .x() 或 .x 并适当使用。

最佳答案

如果您不想为 SFINAE 烦恼,您可以使用 PCL 中漂亮的内置贴图并使用 Eigen 转换函数

您可以执行以下操作,而不是构造 Eigen::Vector3d 类型并将其传递给 f()

pcl::PointXYZ p;
f(p.getVector3fMap().cast<double>);

getVector3fMap() 适用于所有内置 PCL 类型。

关于c++ - 具有 x、y、z 的点和具有 x()、y()、z() 的点的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27322931/

相关文章:

c++ - 设置 QComboBox 大小多个项目

php - Twig 模板不能包含 php 模板

c++ - 如何使用 C++ 中的 Eigen 库加速我的函数?

c++ - Eigen 张量代码非常慢

c++ - 具有堆栈分配的 C++ 类的 C 包装器

c++ - win32 应用程序是否只有一个消息循环?还是每个窗口一个消息循环?

c++ - 适用于 Linux 的类似 Windows 的消息框 - 这个 C++/Motif 实现是否可行?

c++ - 可变参数模板类中的多重继承和调用构造函数

c++ - C++ 元编程中的模板柯里化(Currying)

c++ - 如何使用 Armadillo 或特征库获得稀疏矩阵的特征分解?