Pull to refresh

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

Reading time1 min
Views4.2K
Нередко программисты для удобства и краткости переопределяют простейшие типы данных, дают им другие имена. Чаще всего это делаетс примерно так:

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++ библиотеки.
Tags:
Hubs:
Total votes 12: ↑5 and ↓7-2
Comments29

Articles