ReAl (03.01.2012 18:38, просмотров: 120) ответил Скрипач на Уфф. Как все запутанно.
С самого начала хотел написать, но пароль тогда где-то затёр. А без него сикось-накось текст. Можно развести вторым параметром по его значению. Либо осмысленным (для времени, например, масштаб в нужных единицах) и тогда его ещё и в каких-то методах использовать.
template <typename T, int scale> class strict{
public:
T val;
explicit strict() : val() { }
explicit strict(T init_val) : val(init_val) { }
strict operator+(const strict b){ return strict(val + b.val);}
strict operator-(const strict b){ return strict(val - b.val);}
strict operator*(const strict b){ return strict(val * b.val);}
strict operator/(const strict b){ return strict(val / b.val);}
};
typedef strict<int,10> time_10ms_t;
typedef strict<int,1000> time_1s_t;
time_10ms_t a,b,c;
time_1s_t x;
int main(void){
a = b + c;
a = x;
}
Либо просто «абы развести».
enum stri_type { STRI_0, STRI_1 };
template <typename T, stri_type s> class strict{
public:
T val;
explicit strict() : val() { }
explicit strict(T init_val) : val(init_val) { }
...
};
typedef strict<int,STRI_0> time_10ms_t;
typedef strict<int,STRI_1> time_1s_t;