Союз для хранения меток времени.Сравнение чисел с плавающей точкой - PullRequest
0 голосов
/ 03 октября 2018

Пытаясь обернуть свой мозг вокруг пользовательского игрового движка, я наткнулся на фрагмент кода, который кажется мне довольно странным:

union TimeStamp
{
    f32 asFloat;
    u32 asUInt;

    TimeStamp() : asUInt(0U)
    {}

    TimeStamp(f32 floatValue) : asFloat(floatValue)
    {}

    operator u32() const { return this->asUInt; }

    inline const bool operator==(const TimeStamp& other) const { return this->asUInt == other.asUInt; }
    inline const bool operator!=(const TimeStamp& other) const { return this->asUInt != other.asUInt; }

    inline const bool operator<(const TimeStamp& other) const { return this->asFloat < other.asFloat; }
    inline const bool operator>(const TimeStamp& other) const { return this->asFloat > other.asFloat; }

};

Мой опыт работы с C ++ (который весьма ограничен) говорит мне, чтоединственная значимая причина такого объединения состоит в том, чтобы заставить операторы равенства рассматривать сравниваемые метки времени (иначе плавающие) как целые числа?Если да, то зачем кому-то этого хотеть?

Я также не понимаю, в чем здесь смысл перегрузки приведения типа integer, поскольку мы не можем событие init Timestamp с int?

Примечание: f32 и u32 определены как float_t и uint32_t

На всякий случай, вот ссылка, содержащая определение: https://github.com/tobias-stein/EntityComponentSystem/blob/master/EntityComponentSystem/include/ECS/Platform.h

...