ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
20 мая
297180 Топик полностью
Скрипач, пророк (06.01.2012 16:15 - 16:17, просмотров: 182) ответил Скрипач на Снова пытаюсь перелезть на С++. Ради строгой типизации.
Новая беда. В двух разных enum нельзя объявить одинаковый элемент. Как обойти?  enum data_id_t { Unknown, PRESSURE, TEMPERATURE, TIME }; enum Pressure_subtype_t { Abstract, _0_20mA__0_10bar, _0_10V__0_10bar }; enum Temperature_subtype_t { Abstract, // А фигушки! :( PT1000, NTC20K }; template <typename T, data_id_t t, int subtype> class strict{ T val; public: explicit strict(T init_val=0) : 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 T b){ return strict(val * b);} strict operator/(const T b){ return strict(val / b);} friend T RAW_VALUE(strict a){ return a.val; }; }; strict<int, PRESSURE, _0_20mA__0_10bar> a,b; strict<int, PRESSURE, _0_20mA__0_10bar> c; strict<int, PRESSURE, _0_10V__0_10bar> x; int main(void){ a = b; a = b + c; a = strict<int, PRESSURE, _0_20mA__0_10bar>(RAW_VALUE(x)); a = x; // Низзя :) }
... но не любой ценой.