add container SFINAE for hybrid nonlinear factor graph push_back

release/4.3a0
Varun Agrawal 2022-09-14 14:49:48 -04:00
parent 83dd813bff
commit 4f22a06519
1 changed files with 12 additions and 4 deletions

View File

@ -42,6 +42,16 @@ class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
using IsNonlinear = typename std::enable_if<
std::is_base_of<NonlinearFactor, FACTOR>::value>::type;
/// Check if T has a value_type derived from FactorType.
template <typename T>
using HasDerivedValueType = typename std::enable_if<
std::is_base_of<HybridFactor, typename T::value_type>::value>::type;
/// Check if T has a pointer type derived from FactorType.
template <typename T>
using HasDerivedElementType = typename std::enable_if<std::is_base_of<
HybridFactor, typename T::value_type::element_type>::value>::type;
public:
using Base = HybridFactorGraph;
using This = HybridNonlinearFactorGraph; ///< this class
@ -114,15 +124,13 @@ class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
* copied)
*/
template <typename CONTAINER>
Base::Base::HasDerivedElementType<CONTAINER> push_back(
const CONTAINER& container) {
HasDerivedElementType<CONTAINER> push_back(const CONTAINER& container) {
Base::push_back(container.begin(), container.end());
}
/// Push back non-pointer objects in a container (factors are copied).
template <typename CONTAINER>
Base::Base::HasDerivedValueType<CONTAINER> push_back(
const CONTAINER& container) {
HasDerivedValueType<CONTAINER> push_back(const CONTAINER& container) {
Base::push_back(container.begin(), container.end());
}