我有一个问题是关注Eigen C ++中断言失败的最佳方法。 我知道如果有错误的矩阵计算,Eigen会通过断言来停止程序失败。 例如,
MatrixXf a(2, 2);
MatrixXf b(1, 1);
MatrixXf c = a + b;
在这种情况下,矩阵a和b的大小是不同的,因此断言失败。 那么避免它的最佳方法是什么?
如果我在计算之前每次都检查矩阵大小,我可以避免。
MatrixXf a(2, 2);
MatrixXf b(1, 1);
MatrixXf c;
if (a.cols() == b.cols() && a.rows() == b.rows()) {
c = a + b;
}
但我认为这不是聪明的方法,检查每个计算。
有没有更好的方法来检查它? 我可以通过使用try-catch来捕获异常吗?或者Eigen有任何检查功能吗?
答案 0 :(得分:1)
您可以预定义a.status
宏来抛出异常而不是断言。 E.g:
eigen_assert
但是@n.m.指出,你应该修改你的逻辑错误,即如果你不确定它们的大小匹配,就不应该尝试添加矩阵。