Correcting VLA issue, and add template specification for between Pose2 objects. More template specifcations will be needed on windows, unless another fix is found
parent
5bcb880759
commit
701dcc1c99
|
@ -206,11 +206,20 @@ private:
|
|||
// with an execution trace, made up entirely of "Record" structs, see
|
||||
// the FunctionalNode class in expression-inl.h
|
||||
size_t size = traceSize();
|
||||
#ifdef _MSC_VER
|
||||
ExecutionTraceStorage* traceStorage = new ExecutionTraceStorage[size];
|
||||
ExecutionTrace<T> trace;
|
||||
T value(traceExecution(values, trace, traceStorage));
|
||||
trace.startReverseAD1(jacobians);
|
||||
delete[] traceStorage;
|
||||
return value;
|
||||
#else
|
||||
ExecutionTraceStorage traceStorage[size];
|
||||
ExecutionTrace<T> trace;
|
||||
T value(traceExecution(values, trace, traceStorage));
|
||||
trace.startReverseAD1(jacobians);
|
||||
return value;
|
||||
#endif
|
||||
}
|
||||
|
||||
// be very selective on who can access these private methods:
|
||||
|
|
|
@ -8,13 +8,26 @@
|
|||
#pragma once
|
||||
|
||||
#include <gtsam/nonlinear/Expression.h>
|
||||
#include <gtsam/geometry/Pose2.h>
|
||||
#include <gtsam/geometry/Pose3.h>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
namespace gtsam {
|
||||
|
||||
// 2D Geometry
|
||||
typedef Expression<Pose2> Pose2_;
|
||||
|
||||
Pose2_ between(const Pose2_& x, const Pose2_& p) {
|
||||
Pose2(Pose2::*transform)(const Pose2& p,
|
||||
boost::optional<Matrix3&> H1,
|
||||
boost::optional<Matrix3&> H2) const = &Pose2::between;
|
||||
|
||||
return Pose2_(x, transform, p);
|
||||
}
|
||||
|
||||
// Generics
|
||||
|
||||
template<class T>
|
||||
template<typename T>
|
||||
Expression<T> between(const Expression<T>& t1, const Expression<T>& t2) {
|
||||
return Expression<T>(t1, &T::between, t2);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue