diff --git a/gtsam_unstable/nonlinear/Expression-inl.h b/gtsam_unstable/nonlinear/Expression-inl.h index 231193261..cd4bc68a7 100644 --- a/gtsam_unstable/nonlinear/Expression-inl.h +++ b/gtsam_unstable/nonlinear/Expression-inl.h @@ -26,6 +26,8 @@ namespace gtsam { template class Expression; +template +class MethodExpression; /** * Expression node. The superclass for objects that do the heavy lifting @@ -218,8 +220,8 @@ private: expression1_(e1.root()), expression2_(e2.root()), f_(f) { } - friend class Expression ; - + friend class Expression; +public: /// Combine Jacobians static void combine(const Matrix& H1, const Matrix& H2, const JacobianMap& terms1, const JacobianMap& terms2, @@ -288,9 +290,9 @@ public: typedef std::map JacobianMap; - typedef boost::function< - T(const E1*, const E2&, boost::optional, - boost::optional)> method; + typedef + T (E1::*method)(const E2&, boost::optional, + boost::optional) const; private: @@ -326,11 +328,11 @@ public: if (jacobians) { JacobianMap terms1, terms2; Matrix H1, H2; - val = f_(expression1_->value(values, terms1), + val = (expression1_->value(values, terms1).*(f_))( expression2_->value(values, terms2), H1, H2); BinaryExpression::combine(H1, H2, terms1, terms2, *jacobians); } else { - val = f_(expression1_->value(values), expression2_->value(values), + val = (expression1_->value(values).*(f_))(expression2_->value(values), boost::none, boost::none); } return val; diff --git a/gtsam_unstable/nonlinear/Expression.h b/gtsam_unstable/nonlinear/Expression.h index 826b2caf9..0d326dffe 100644 --- a/gtsam_unstable/nonlinear/Expression.h +++ b/gtsam_unstable/nonlinear/Expression.h @@ -63,7 +63,7 @@ public: typename MethodExpression::method f, const Expression& expression2) { // TODO Assert that root of expressions 1 and 2 are not null. - root_.reset(new MethodExpression(f, expression1, expression2)); + root_.reset(new MethodExpression(expression1, f, expression2)); } /// Return keys that play in this expression diff --git a/gtsam_unstable/nonlinear/tests/testExpression.cpp b/gtsam_unstable/nonlinear/tests/testExpression.cpp index faad56777..8602bcbf3 100644 --- a/gtsam_unstable/nonlinear/tests/testExpression.cpp +++ b/gtsam_unstable/nonlinear/tests/testExpression.cpp @@ -7,7 +7,7 @@ * See LICENSE for the license information - * -------------------------------------------------------------------------- */ + * -------------------------------1------------------------------------------- */ /** * @file testExpression.cpp @@ -60,8 +60,8 @@ TEST(BAD, test) { // Create expression tree // MethodExpression::method m = &Pose3::transform_to; // MethodExpression methodExpression(x, &Pose3::transform_to, p); -// Expression p_cam(x, &Pose3::transform_to, p); - Expression p_cam(transformTo, x, p); + Expression p_cam(x, &Pose3::transform_to, p); + //Expression p_cam(transformTo, x, p); Expression projection(project, p_cam); Expression uv_hat(uncalibrate, K, projection);