add container SFINAE for hybrid nonlinear factor graph push_back
parent
83dd813bff
commit
4f22a06519
|
|
@ -42,6 +42,16 @@ class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
|
||||||
using IsNonlinear = typename std::enable_if<
|
using IsNonlinear = typename std::enable_if<
|
||||||
std::is_base_of<NonlinearFactor, FACTOR>::value>::type;
|
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:
|
public:
|
||||||
using Base = HybridFactorGraph;
|
using Base = HybridFactorGraph;
|
||||||
using This = HybridNonlinearFactorGraph; ///< this class
|
using This = HybridNonlinearFactorGraph; ///< this class
|
||||||
|
|
@ -114,15 +124,13 @@ class GTSAM_EXPORT HybridNonlinearFactorGraph : public HybridFactorGraph {
|
||||||
* copied)
|
* copied)
|
||||||
*/
|
*/
|
||||||
template <typename CONTAINER>
|
template <typename CONTAINER>
|
||||||
Base::Base::HasDerivedElementType<CONTAINER> push_back(
|
HasDerivedElementType<CONTAINER> push_back(const CONTAINER& container) {
|
||||||
const CONTAINER& container) {
|
|
||||||
Base::push_back(container.begin(), container.end());
|
Base::push_back(container.begin(), container.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Push back non-pointer objects in a container (factors are copied).
|
/// Push back non-pointer objects in a container (factors are copied).
|
||||||
template <typename CONTAINER>
|
template <typename CONTAINER>
|
||||||
Base::Base::HasDerivedValueType<CONTAINER> push_back(
|
HasDerivedValueType<CONTAINER> push_back(const CONTAINER& container) {
|
||||||
const CONTAINER& container) {
|
|
||||||
Base::push_back(container.begin(), container.end());
|
Base::push_back(container.begin(), container.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue