diff --git a/gtsam/discrete/DecisionTreeFactor.cpp b/gtsam/discrete/DecisionTreeFactor.cpp index c15fd4e2e..4b16dad8a 100644 --- a/gtsam/discrete/DecisionTreeFactor.cpp +++ b/gtsam/discrete/DecisionTreeFactor.cpp @@ -70,6 +70,9 @@ namespace gtsam { result = std::make_shared((*tf) * TableFactor(*this)); } else if (auto dtf = std::dynamic_pointer_cast(f)) { result = std::make_shared(this->operator*(*dtf)); + } else { + // Simulate double dispatch in C++ + result = std::make_shared(f->operator*(*this)); } return result; } diff --git a/gtsam/discrete/TableFactor.cpp b/gtsam/discrete/TableFactor.cpp index 3ca8fecda..6516a4a98 100644 --- a/gtsam/discrete/TableFactor.cpp +++ b/gtsam/discrete/TableFactor.cpp @@ -262,6 +262,10 @@ DiscreteFactor::shared_ptr TableFactor::multiply( result = std::make_shared(this->operator*(*tf)); } else if (auto dtf = std::dynamic_pointer_cast(f)) { result = std::make_shared(this->operator*(TableFactor(*dtf))); + } else { + // Simulate double dispatch in C++ + result = std::make_shared( + f->operator*(this->toDecisionTreeFactor())); } return result; }