Traits.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00029 #ifndef KEYVALUE_KEY_TRAITS_H_
00030 #define KEYVALUE_KEY_TRAITS_H_
00031
00032 #include "keyvalue/key/converter/StdSingle.h"
00033 #include "keyvalue/key/map/Default.h"
00034 #include "keyvalue/key/Checker.h"
00035 #include "keyvalue/key/Key.h"
00036 #include "keyvalue/util/IsBasic.h"
00037
00038 namespace keyvalue {
00039 namespace key {
00040
00108 template <typename ElementType,
00109 template <typename> class ConverterType = StdSingle,
00110 template <typename> class MapType = Default>
00111 class Traits :
00112 public Key,
00113 public MapType<ElementType>,
00114 public Checker<
00115 ConverterType<typename MapType<ElementType>::OutputType_> > {
00116
00117 public:
00118
00119 typedef Traits<ElementType, ConverterType, MapType> Traits_;
00120
00121 typedef ConverterType<typename MapType<ElementType>::OutputType_>
00122 ConverterType_;
00123
00124 typedef typename ConverterType_::InputType_ InputType_;
00125 typedef typename ConverterType_::OutputType_ OutputType_;
00126
00127 enum { isBasicOrEnum_ = util::IsBasicOrEnum<ElementType>::value_ };
00128
00134 Traits(const string& name);
00135
00141 string
00142 getName() const;
00143
00144 };
00145
00146
00147
00148
00149
00150 template <typename ElementType, template <typename> class ConverterType,
00151 template <typename> class MapType>
00152 Traits<ElementType, ConverterType, MapType>::Traits(const string& name) :
00153 Key(name) {
00154 }
00155
00156
00157
00158
00159
00160 template <typename ElementType, template <typename> class ConverterType,
00161 template <typename> class MapType>
00162 string
00163 Traits<ElementType, ConverterType, MapType>::getName() const {
00164 return Key::getName();
00165 }
00166
00167 }
00168 }
00169
00170 #endif // KEYVALUE_KEY_TRAITS_H_