diff --git a/Modules/Core/Functor/include/otbFunctorImageFilter.h b/Modules/Core/Functor/include/otbFunctorImageFilter.h index a81353fb65b2cc7d2d3f7d5fcdb03f5e9b25d1b0..df9ac846ce6f67802a9127c8812490c4874f3844 100644 --- a/Modules/Core/Functor/include/otbFunctorImageFilter.h +++ b/Modules/Core/Functor/include/otbFunctorImageFilter.h @@ -209,7 +209,9 @@ public: // the functor using InputHasNeighborhood = typename FunctorFilterSuperclassHelper<TFunction>::InputHasNeighborhood; using InputTypesTupleType = typename Superclass::InputTypesTupleType; - + template<size_t I> using InputImageType = typename Superclass::template InputImageType<I>; + + /** Run-time type information (and related methods). */ itkTypeMacro(FunctorImageFilter, ImageToImageFilter); diff --git a/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h b/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h index 0011f8d04fb94d9989ac01b1d3ef33851a1d8cb5..d2c6930564187b17609a01eb142e1ea1abc1ae8f 100644 --- a/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h +++ b/Modules/Core/Functor/include/otbVariadicInputsImageFilter.h @@ -33,16 +33,18 @@ public: using Pointer = itk::SmartPointer<Self>; using ConstPointer = itk::SmartPointer<const Self>; using Superclass = itk::ImageSource<TOuptut>; - + using InputTypesTupleType = std::tuple<TInputs...>; - + + template <size_t I> using InputImageType = typename std::tuple_element<I,InputTypesTupleType>::type; + itkNewMacro(Self); template <std::size_t I> void SetVInput(const typename std::tuple_element<I,InputTypesTupleType>::type * inputPtr) { this->SetNthInput(I,const_cast<typename std::tuple_element<I,InputTypesTupleType>::type *>(inputPtr)); } - + #define DefineLegacySetInputMacro(n) \ template<typename Tuple = InputTypesTupleType, typename Check = typename std::enable_if<n<=std::tuple_size<Tuple>::value >::type> \ void SetInput ## n(const typename std::tuple_element<n-1,Tuple>::type * img) \ diff --git a/Modules/Core/Functor/test/otbFunctorImageFilter.cxx b/Modules/Core/Functor/test/otbFunctorImageFilter.cxx index 39fcca0ef3f8cb2e31e562ecb33ee53eb452d102..abb7505006676544ecadebe2817118704c2d808c 100644 --- a/Modules/Core/Functor/test/otbFunctorImageFilter.cxx +++ b/Modules/Core/Functor/test/otbFunctorImageFilter.cxx @@ -101,7 +101,7 @@ template <typename T> struct TypesCheck auto filter = NewFunctorFilter(functor); using FilterType = typename decltype(filter)::ObjectType; - static_assert(std::is_same<typename std::tuple_element<0, typename FilterType::Superclass::InputTypesTupleType>::type, InputImageType>::value, ""); + static_assert(std::is_same<typename FilterType::template InputImageType<0>, InputImageType>::value, ""); filter->SetVInputs(in); filter->SetInput1(in);