Пытаясь обернуть свой мозг вокруг пользовательского игрового движка, я наткнулся на фрагмент кода, который кажется мне довольно странным:
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