22struct QuadraticResidualCostTpl : 
public CostFunctionBaseTpl<_Scalar> {
 
   24  using Scalar = _Scalar;
 
   27  using RowMatrixXs = Eigen::Matrix<Scalar, -1, -1, Eigen::RowMajor>;
 
   29  using Base::computeGradient;
 
   30  using Base::computeHessian;
 
   31  using FunctionPtr = shared_ptr<FunctionType>;
 
   43  QuadraticResidualCostTpl(FunctionPtr residual, 
const ConstMatrixRef &weights,
 
   44                           const ConstVectorRef &slope,
 
   45                           const Scalar constant = Scalar(0.));
 
   47  QuadraticResidualCostTpl(FunctionPtr residual, 
const ConstMatrixRef &weights,
 
   48                           const Scalar constant = Scalar(0.))
 
   49      : QuadraticResidualCostTpl(residual, weights,
 
   50                                 VectorXs::Zero(residual->
nr()), constant) {}
 
   54  template <
typename Underlying, 
typename... ResidualArgs>
 
   56                           const ConstVectorRef &slope, 
const Scalar constant,
 
   57                           ResidualArgs &...args)
 
   58      : QuadraticResidualCostTpl(std::make_shared<Underlying>(args...), weights,
 
 
   61  Scalar 
call(
const ConstVectorRef &x) 
const;
 
   63  void computeGradient(
const ConstVectorRef &x, VectorRef out) 
const;
 
   65  void computeHessian(
const ConstVectorRef &x, MatrixRef out) 
const;
 
   69  mutable VectorXs tmp_w_err;
 
   70  mutable MatrixXs Jres;
 
   71  mutable RowMatrixXs JtW;