[modernize] Modernize AutoDiff and NumericDiff CostFunctions to C++17

Modernize the construction and initialization logic of AutoDiffCostFunction,
NumericDiffCostFunction, AutoDiffFirstOrderFunction,
NumericDiffFirstOrderFunction, DynamicAutoDiffCostFunction,
DynamicNumericDiffCostFunction, and CostFunctionToFunctor by utilizing
C++17 features:

- Simplify constructor delegation using if constexpr, removing the need for
  internal InitTag structures.
- Use std::is_constructible_v for cleaner SFINAE in variadic constructors.
- Add static_assert to catch improper usage of DYNAMIC residuals/parameters
  at compile-time.
- Add Ownership support to AutoDiffFirstOrderFunction,
  DynamicAutoDiffCostFunction, and DynamicNumericDiffCostFunction.
- Simplify CostFunctionToFunctor::operator() using variadic parameter packs.
- Use this->num_residuals() for consistent and clear access to base class
  state.
- Minor code quality improvements and removal of redundant template
  parameters.

Change-Id: Id760a26ba2ceca4fb2939ef7632f2f1d9cc430c9
This commit is contained in:
Sameer Agarwal
2026-03-17 14:36:58 -07:00
parent ae3f2e8683
commit bcbaff6656
6 changed files with 81 additions and 65 deletions
+2 -2
View File
@@ -232,7 +232,7 @@ class AutoDiffCostFunction final
return internal::AutoDifferentiate<kNumResiduals, ParameterDims>(
*functor_,
parameters,
SizedCostFunction<kNumResiduals, Ns...>::num_residuals(),
this->num_residuals(),
residuals,
jacobians);
};
@@ -256,7 +256,7 @@ class AutoDiffCostFunction final
"residuals is set to ceres::DYNAMIC.");
if constexpr (InitTag::value == DYNAMIC_INIT) {
SizedCostFunction<kNumResiduals, Ns...>::set_num_residuals(num_residuals);
this->set_num_residuals(num_residuals);
}
}