1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include <string>
enum PropertyType
{
PropertyInt16,
PropertyInt32,
PropertyChar,
PropertyString,
PropertySingleFloat,
PropertyDoubleFloat,
PropertyPointer
};
template< class T > struct PropertyTypeTraits { };
template<> struct PropertyTypeTraits<short>
{
enum TypeValues { TypeValue = PropertyInt16 };
};
template<> struct PropertyTypeTraits<int>
{
enum TypeValues { TypeValue = PropertyInt32 };
};
template<> struct PropertyTypeTraits<long>
{
enum TypeValues { TypeValue = PropertyInt32 };
};
template<> struct PropertyTypeTraits<std::string>
{
enum TypeValues { TypeValue = PropertyString };
};
//Spécialisation partielle pour les pointeurs
template<class T> struct PropertyTypeTraits<T*>
{
enum TypeValues { TypeValue = PropertyPointer };
};
class IProperty
{
public:
virtual PropertyType GetPropertyType() = 0;
virtual std::string ToString() = 0;
};
template<class T>
class CProperty
{
typedef T value_type;
public:
virtual PropertyType GetPropertyType()
{
return static_cast< PropertyType >( PropertyTypeTraits< T >::TypeValue );
}
virtual std::string ToString();
private:
T m_tValue;
};
void TestTemplate3(void)
{
CProperty< int > prop;
PropertyType type = prop.GetPropertyType();
(void)type;
} |
Partager