ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
296385 Топик полностью
Скрипач, пророк (03.01.2012 16:15 - 16:51, просмотров: 126) ответил Скрипач на Похоже есть такая магия. Если взять в качестве базового параметризированный класс то потомки будут от разных классов, правильно?
Уфф. Как все запутанно.  template <class T> class strict{ public: T val; explicit strict(T init_val){ val=init_val;}; strict operator+(const strict b){ return strict(val + b.val);}; }; #define DEFINE_STRICT_TYPE(new_type, orig_type) \ class new_type : public strict<orig_type> { \ public: \ explicit new_type(orig_type b = 0) : strict<orig_type>(b) { } \ explicit new_type(strict<orig_type> b) : strict<orig_type>(b.val) { } \ } DEFINE_STRICT_TYPE(s_int1, int); DEFINE_STRICT_TYPE(s_int2, int); s_int1 a,b,c; s_int2 x; int main(void){ a = b; // OK a = s_int1(b + c); // Если explicit, то без приведения типа, ошибка. a = x; // Если не explicit, то пропустит // ибо базовый тип у s_int1 и s_int2 ОДИН И ТОТ ЖЕ! }
... но не любой ценой.