Шаблон Def предназначен для того, чтобы образовывать производный класс от заданного и добавлять к нему член isDef. Этот член позволяет узнать определён объект или нет: template < class T > struct BaseType { typedef T type; }; template <> struct BaseType < nat > { typedef Set1 < nat > type; }; template <> struct BaseType < bool > { typedef Set1 < bool > type; }; template <> struct BaseType < double > { typedef Set1 < double > type; }; template < class T > struct Def : public BaseType < T >::type { typedef typename BaseType < T >::type base; bool isDef; Def () : isDef(false) {} Def ( const T & v, bool d = true ) : base ( v ), isDef ( d ) {} Def & operator = ( const T & v ) { isDef = true; *(base*) this = v; return *this; } }; Описание шаблона Set1 находится здесь. Исходники находятся в файле Template.h. Наверх |