Кресты / Говнокод #38

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
// Приведение численного типа к структуре с битовыми полями, неоптимизированная версия, нету 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, конечно.

Запостил: YpaHeLI_ YpaHeLI_,

Комментарии (1) RSS

  • Напиши на ру, тут никто не сидит.
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8