Как стать автором
Обновить

Переопределение стандартных типов в C++

Время на прочтение1 мин
Количество просмотров4.4K
Нередко программисты для удобства и краткости переопределяют простейшие типы данных, дают им другие имена. Чаще всего это делаетс примерно так:

typedef unsingned int uint32;
typedef signed int int32;
typedef unsigned char byte;

Ну и так далее. Выступлю с предложением: а почему бы не переопределить простейшие типы, написав для каждого типа свой класс? Расход памяти при хранении таких объектов увеличиться по идее не должен(ессно, виртуальные функции не используем). Например, пишем класс Double, примерно так:

class Double
{
public:
     Double(const Double& value);
     Double          operator+(const Double &right) const;
     Double          operator-(const Double &right) const;
     Bool              IsPositiveInfinity();
     Bool              IsNegativeInfinity();
     
private:
     double _value;
     
}



Или например для типа char:

class Char
{
public:
    Char(char value);

    Bool IsDecimalDigit() const;
    Bool IsLetter() const;
    Bool IsWhiteSpace() const;
    
    Bool operator==(const Char &other);
    Bool operator!=(const Char &other);

private:
    char _value;
};


Таким образом, можно работать с простейшими типами как с объектами, повысить удобочитаемость кода, иметь больше контроля над тем что происходит в программе(например, для подсчета количества умножений, выполняемых над типом double достаточно поместить счетчик в перегруженный оператор).

Оверхеда по производительности/расходу памяти по идее быть не должно.

Пока не могу поделиться плюсами/минусами такого подхода, но постепенно внедряю его в свои C++ библиотеки.
Теги:
Хабы:
Всего голосов 12: ↑5 и ↓7-2
Комментарии29

Публикации

Истории

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань