Advertisement
Radfler

::as_bytes

Mar 9th, 2018
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <istream>
  2. #include <memory>
  3. #include <ostream>
  4. #include <type_traits>
  5.  
  6. namespace details {
  7.  
  8.     template<typename T>
  9.     struct bytes_streaming {
  10.         T* object;
  11.     };
  12.  
  13.     template<typename CharT, typename Traits, typename T>
  14.     std::basic_ostream<CharT, Traits>&
  15.         operator<<(std::basic_ostream<CharT, Traits>& stream, bytes_streaming<T> streamer) {
  16.  
  17.         return stream.write(reinterpret_cast<const char*>(streamer.object), sizeof(T));
  18.  
  19.     }
  20.  
  21.     template<typename CharT, typename Traits, typename T>
  22.     std::basic_istream<CharT, Traits>&
  23.         operator>>(std::basic_istream<CharT, Traits>& stream, bytes_streaming<T> streamer) {
  24.  
  25.         return stream.read(reinterpret_cast<char*>(streamer.object), sizeof(T));
  26.  
  27.     }
  28.  
  29. }
  30.  
  31. template<typename T>
  32. std::enable_if_t<std::is_trivially_copyable_v<T>, details::bytes_streaming<T>> as_bytes(T& object) {
  33.     return {std::addressof(object)};
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement