← index
cplusplus11.Examples/templates/template-union.cpp
Source: cplusplus11.Examples/templates/template-union.cpp
/* union templates */

#include<iostream>

template<typename T>
union DataArray {
    T object;
    unsigned char bytes[sizeof(T)];
};

template<typename T>
std::ostream &operator<<(std::ostream &out, const DataArray<T> &d) {
    out << d.object;
    return out;
}


int main() {
    
    DataArray<unsigned int> value;
    DataArray<unsigned int> value2;
    // manipulate bytes of the integer
    value.bytes[0] = 0xFF;
    value.bytes[1] = 0xFF;
    value.bytes[2] = 0xFF;
    value.bytes[3] = 0xFF;
    // same as
    value2.object = 0xFFFFFFFF;
    
    
    std::cout << value << "\n";
    std::cout << value2 << "\n";
    
    
    value.bytes[3] = 0;
    
    std::cout << value << "\n";
    
    value.bytes[2] = 0;
    
    std::cout << value << "\n";
    
    value.bytes[1] = 0;
    
    std::cout << value << "\n";
    
    value.bytes[0] = 0;
    
    std::cout << value << "\n";
    
    
    return 0;
}