Correcting VLA issue, and add template specification for between Pose2 objects. More template specifcations will be needed on windows, unless another fix is found

release/4.3a0
Andrew Melim 2014-12-08 21:39:12 -05:00
parent 5bcb880759
commit 701dcc1c99
2 changed files with 23 additions and 1 deletions

View File

@ -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:

View File

@ -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);
}