Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <istream>
- #include <memory>
- #include <ostream>
- #include <type_traits>
- namespace details {
- template<typename T>
- struct bytes_streaming {
- T* object;
- };
- template<typename CharT, typename Traits, typename T>
- std::basic_ostream<CharT, Traits>&
- operator<<(std::basic_ostream<CharT, Traits>& stream, bytes_streaming<T> streamer) {
- return stream.write(reinterpret_cast<const char*>(streamer.object), sizeof(T));
- }
- template<typename CharT, typename Traits, typename T>
- std::basic_istream<CharT, Traits>&
- operator>>(std::basic_istream<CharT, Traits>& stream, bytes_streaming<T> streamer) {
- return stream.read(reinterpret_cast<char*>(streamer.object), sizeof(T));
- }
- }
- template<typename T>
- std::enable_if_t<std::is_trivially_copyable_v<T>, details::bytes_streaming<T>> as_bytes(T& object) {
- return {std::addressof(object)};
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement