8 Kasım 2019 Cuma

std::bit_cast metodu

Giriş
İçi şuna benzer.
template <class Dest, class Source>
inline Dest bit_cast(Source const &source) {
  static_assert(sizeof(Dest) == sizeof(Source));
  static_assert(std::is_trivially_copyable<Dest>::value);
  static_assert(std::is_trivially_copyable<Source>::value);

  Dest dest;
  std::memcpy(&dest, &source, sizeof(dest));
  return dest;
}
Örnek
Şöyle yaparız.
float f = /* some value */;
auto bits = std::bit_cast<std::array<unsigned char, sizeof(float)>>(f);
Union Kullanımda İşe Yarar
Elimizde şöyle bir kod olsun. Union'daki bellek alanına a veya b'nin atanmış olup olmamasına bakmaksızın std::bit_cast ile erişebiliriz.
union u {
  int a;
  int b;
};

Hiç yorum yok:

Yorum Gönder