16 Mayıs 2016 Pazartesi

std::aligned_union

Giriş
aligned_union ve aligned_storage bellek için kullanılacak bir tip verir. Bunu typedef gibi düşünebilir. Bu tipden bir değişken yaratırız.

sizeof ile kullanım
Şöyle yaparız.
#include <iostream>
#include <type_traits>

int main() 
{
    using storage_type = 
        std::aligned_storage<sizeof(double), alignof(double)>::type;
    using union_storage_type =
        std::aligned_union<sizeof(double), double>::type;

    storage_type storage;
    union_storage_type union_storage;

    std::cout << sizeof(storage_type) << '\n';
    std::cout << sizeof(union_storage_type) << '\n';
    std::cout << sizeof(storage) << '\n';
    std::cout << sizeof(union_storage) << '\n';
    std::cout << sizeof(double) << '\n';
    return 0;
}
Çıktı olarak şunu alırız.
8
8
8
8
8
Eğer using olmadan kullanırsak şöyle yaparız.
template<typename ...Types>
struct variant
{
private:
  uint8_t index;
  typename std::aligned_union<Types...>::type storage;
};


Hiç yorum yok:

Yorum Gönder