我将两个 Eigen3 向量包装在一个模板LineSegment<T,dim>
类中。你可以这样使用它:
typedef LineSegment<double,2> LineSegment2d;
typedef LineSegment<double,3> LineSegment3d;
typedef LineSegment<int,3> LineSegment3i;
它包含一个模板化的方法来更改组件的尺寸。这是修剪的定义:
template<typename T,int dim>
struct LineSegment
{
public:
template<int newDim>
LineSegment<T,newDim> to() const
{
Eigen::Matrix<T,newDim,1> newp1;
Eigen::Matrix<T,newDim,1> newp2;
// TODO initialise newp1 and newp2 from d_p1 and d_p2
return LineSegment<T,newDim>(newp1, newp2);
}
// ... other members ...
protected:
Eigen::Matrix<T,dim,1> d_p1;
Eigen::Matrix<T,dim,1> d_p2;
}
所以我的问题是,我怎样才能组成返回值,如上所示?这应该支持增加和减少维度。
我尝试使用 Eigen3 resize(int)方法,但如果没有看到有关混合矩阵大小的警告,就无法让它工作。
最终,这应该有效:
LineSegment2d ls2d;
LineSegment3d ls3d = ls2d.to<3>(); // increase dim
ls2d = ls3d.to<2>(); // decrease dim
我对 C++ 模板相对较新,如果这不仅仅是一个 API 问题并且与模板有关,我将不胜感激。