Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

с++ использование единиц измерения для указания значений переменных

#cpp #cpp11 #переменные #cpp14 #преобразование_типов


Подскажите, как современный стиль программирования на C++ рекомендует использовать
единицы измерения при указания значений переменных?

Мне совершенно не нравится использование #define, поскольку очень часто теряется
смысловая нагрузка таких переменных, не видная привязка к конкретному классу (где это
может быть использовано), да и просто не очень эстетично

#define _KBps 1024.0


Поэтому я использую статические константы. Например для класса, который работает
с объектами в секунду и пользователь [кода] может указать определённые границы, я делаю так:

class CMyClass
{
public:
    static const double m_Ops;
    static const double m_KOps;
    static const double m_MOps;

// основная начинка класса
};

const double CMyClass::m_Ops = 1;
const double CMyClass::m_KOps = 1000.0;
const double CMyClass::m_MOps = 1000000.0;


CMyClass(2.0 * CMyClass::m_KOps, 1.34 * CMyClass::m_MOps);


Что уже (на мой скромный взгляд) более наглядно и удобно.

Но наверное С++1x  в этом отношении шагнули дальше и можно указывать 

CMyClass(2.0KOps, 1.34MOps);


?

Так ли это (вроде что-то подобное видел)?
И вообще какой подход предпочтителен?
    


Ответы

Ответ 1



См. п. 13.5.8 стандарта - литералы, определенные пользователем. Вот простейший пример: long double operator ""_MOps(long double x) { return x*1e6; } auto main() -> int { cout << 2.0_MOps << endl; }

Комментариев нет:

Отправить комментарий