据我了解, 的接口Ceres
要求将每个残差定义为一个函子,其中operator()
是一个const
成员函数。这是我感兴趣的一个例子:
class some_residual
{
public:
template<typename type>
bool operator()(const type* const some_params, type* residual) const;
Eigen::MatrixXd m_M;/*The explanation follows. Nevermind its type, all
that matters is that it is not a raw buffer*/
};
现在,我在一个特殊情况下需要“帮助”矩阵m_M
,我想在里面使用它operator()
。有几个选项,例如,我可以将其声明为mutable Eigen::MatrixXd m_M;
或将其更改为std::shared_ptr<Eigen::MatrixXd> m_pM;
并*mP
从内部更新operator()
(或者类似地,我可以使用引用)。作为另一种选择,我可以将此矩阵的数据作为原始 C 指针传递给,并在 优化operator()
中修复它们。Ceres
我更愿意尽可能避免使用原始指针,而且我倾向于认为 usingmutable
是最好的解决方案。一般来说,这是好的还是坏的做法,特别是,使用它是否安全Ceres
?我还有什么其他选择?