mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-30 00:50:37 +08:00
A number of small changes.
1. Add a move constructor to NumericDiffCostFunction, DynamicAutoDiffCostfunction and DynamicNumericDiffCostFunction. 2. Add optional ownership of the underlying functor. 3. Update docs to reflect this as well as the variadic templates that allow an arbitrary number of parameter blocks. Change-Id: I57bbb51fb9e75f36ec2a661b603beda270f30a19
This commit is contained in:
@@ -40,6 +40,7 @@
|
||||
#include "ceres/dynamic_cost_function.h"
|
||||
#include "ceres/internal/fixed_array.h"
|
||||
#include "ceres/jet.h"
|
||||
#include "ceres/types.h"
|
||||
#include "glog/logging.h"
|
||||
|
||||
namespace ceres {
|
||||
@@ -78,10 +79,25 @@ namespace ceres {
|
||||
template <typename CostFunctor, int Stride = 4>
|
||||
class DynamicAutoDiffCostFunction : public DynamicCostFunction {
|
||||
public:
|
||||
explicit DynamicAutoDiffCostFunction(CostFunctor* functor)
|
||||
: functor_(functor) {}
|
||||
|
||||
virtual ~DynamicAutoDiffCostFunction() {}
|
||||
// Takes ownership by default.
|
||||
DynamicAutoDiffCostFunction(CostFunctor* functor,
|
||||
Ownership ownership = TAKE_OWNERSHIP)
|
||||
: functor_(functor), ownership_(ownership) {}
|
||||
|
||||
explicit DynamicAutoDiffCostFunction(DynamicAutoDiffCostFunction&& other)
|
||||
: functor_(std::move(other.functor_)), ownership_(other.ownership_) {}
|
||||
|
||||
virtual ~DynamicAutoDiffCostFunction() {
|
||||
// Manually release pointer if configured to not take ownership
|
||||
// rather than deleting only if ownership is taken. This is to
|
||||
// stay maximally compatible to old user code which may have
|
||||
// forgotten to implement a virtual destructor, from when the
|
||||
// AutoDiffCostFunction always took ownership.
|
||||
if (ownership_ == DO_NOT_TAKE_OWNERSHIP) {
|
||||
functor_.release();
|
||||
}
|
||||
}
|
||||
|
||||
bool Evaluate(double const* const* parameters,
|
||||
double* residuals,
|
||||
@@ -251,6 +267,7 @@ class DynamicAutoDiffCostFunction : public DynamicCostFunction {
|
||||
|
||||
private:
|
||||
std::unique_ptr<CostFunctor> functor_;
|
||||
Ownership ownership_;
|
||||
};
|
||||
|
||||
} // namespace ceres
|
||||
|
||||
Reference in New Issue
Block a user