2 #ifndef LVR2_IO_GFeatureBase_HPP 3 #define LVR2_IO_GFeatureBase_HPP 19 template<
template<
typename>
typename Feature,
typename Derived>
30 template<
template<
typename>
typename ...Features>
31 class FeatureBase :
public Features<FeatureBase<Features...> >...
34 template <
typename T,
typename Tuple>
40 template <
typename T,
typename U,
typename... Ts>
43 template <
typename T,
typename... Ts>
44 struct has_type<T, std::tuple<T, Ts...>> : std::true_type {};
47 static constexpr std::size_t
N =
sizeof...(Features);
50 template<
template<
typename>
typename F>
56 template<
typename>
typename F,
57 template<
typename>
typename ...Fs
62 template<
typename>
typename F,
63 template<
typename>
typename ...Fs
70 template<
typename>
typename F
73 using type =
typename std::conditional<
80 template<
template<
typename>
typename F>
86 template<
typename>
typename F,
87 template<
typename>
typename ...Fs
92 template<
typename>
typename F,
93 template<
typename>
typename ...Fs
99 template<
template<
typename>
typename F>
109 template<
template<
typename>
typename F>
112 template<
template<
typename>
typename ...F>
115 template<
typename OTHER>
119 #if __cplusplus <= 201500L 121 #pragma message("using Tp::save... needs c++17 at least or a newer compiler") 135 template<
template<
typename>
typename F>
138 template<
template<
typename>
typename F>
139 F<FeatureBase>*
scast();
141 template<
template<
typename>
typename F>
142 F<FeatureBase>*
dcast();
149 template<
template<
typename>
typename Feature,
typename Derived =
FeatureBase<> >
154 template<
template<
typename>
typename Feature>
160 #include "FeatureBase.tcc" 162 #endif // LVR2_IO_GFeatureBase_HPP
Manager Class for all FeatureBase components located in hdf5 directory.
Helper class how to construct a IO feature with its dependencies.
typename Derived::template add_features< Feature >::type type
const FileKernelPtr m_kernel
typename FeatureConstruct< Feature >::type FeatureBuild
typename std::conditional< FeatureBase< Features... >::has_feature< F >::value, FeatureBase< Features... >, FeatureBase< Features..., F > >::type type
typename add_features< F >::type::template add_features< Fs... >::type type
typename add_features_with_deps< F... >::type AddFeatures
std::tuple< Features< FeatureBase< Features... > >... > features
typename OTHER::template add_features< Features... >::type Merge
FeatureBase(const FileKernelPtr inKernel, const ScanProjectSchemaPtr inDesc)
static constexpr std::size_t N
F< FeatureBase > * dcast()
static constexpr bool HasFeature
USE ONLY THESE METHODS IN APPLICATION ///.
typename add_features< F >::type type
F< FeatureBase > * scast()
std::shared_ptr< ScanProjectSchema > ScanProjectSchemaPtr
const ScanProjectSchemaPtr m_description
std::shared_ptr< FileKernel > FileKernelPtr
typename FeatureConstruct< F, FeatureBase< Features... > >::type type
typename add_features_with_deps< F >::type::template add_features_with_deps< Fs... >::type type