Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
// Приведение численного типа к структуре с битовыми полями, неоптимизированная версия, нету UB
template <class STRUCT_T, typename T>
STRUCT_T struct_cast(const T n)
{
static_assert(std::is_integral_v<T>, "Integral type required as T");
static_assert(std::is_class_v<STRUCT_T>, "class or struct type required as STRUCT_T");
static_assert(std::is_trivially_copyable_v<STRUCT_T>, "Trivially copyable type required as STRUCT_T");
static_assert(sizeof(T) == sizeof(STRUCT_T), "Incompatible types passed");
STRUCT_T result;
memcpy(reinterpret_cast<void*>(&result), reinterpret_cast<const void*>(&n), sizeof(STRUCT_T));
return result;
}
Можно как-нибудь обойтись без memcpy, только без написания костылей типа memcpy блоками по sizeof(T) байт?
Чтобы не было UB, конечно.
guest # 0