将 AlignedBox double 转换为 AlignedBox int

Cast AlignedBox double to AlignedBox int

我正在尝试使用 Eigen AlignedBox。具体来说,我试图通过使用 AlignedBox::cast

将一盒 double 转换为 int 一个
AlignedBox<double, 2> aabbox2d = AlignedBox<double, 2>(Vector2d(0.52342, 2.12315), Vector2d(3.87346, 4.72525));
aabbox2d.cast<AlignedBox<int, 2>>();
auto minx = aabbox2d.min().x();

无论如何,当执行到 min() 时,我得到一个断言:

Assertion failed: (((SizeAtCompileTime == Dynamic && (MaxSizeAtCompileTime==Dynamic || size<=MaxSizeAtCompileTime)) || SizeAtCompileTime == size) && size>=0), function resize, file /Users/max/Developer/Stage/Workspace/AutoTools3D/dep/libigl/external/eigen/Eigen/src/Core/PlainObjectBase.h, line 312.

请注意,这不同于将矩阵标量转换为另一个矩阵标量。隐含了一个对象。 据说我没有正确地进行演员表。有人知道正确的方法吗? 谢谢

查阅 AlignedBox::cast 的文档表明 cast 的模板参数定义为 template<typename NewScalarType>,return 的值是 *this with scalar type casted to NewScalarType。因此 cast 函数不会修改框的现有实例,但 return 是一个新实例。为了使您的示例工作,您需要存储 returned 实例,如下所示:

AlignedBox<double, 2> aabbox2d = AlignedBox<double, 2>(Vector2d(0.52342, 2.12315), Vector2d(3.87346, 4.72525));
AlignedBox<int, 2>  casted = aabbox2d.cast<int>();
const int minx = casted.min().x();

你可以在这里玩这个:https://godbolt.org/z/ozE4rzebb

附带说明:与 documentation states 一样,在使用 Eigen 时应避免使用 auto(不过在这种情况下可能不是问题)