Skip to content

Instantly share code, notes, and snippets.

@ozars
Created October 1, 2019 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ozars/60d89769bf91183a420c7c92a38c2c35 to your computer and use it in GitHub Desktop.
Save ozars/60d89769bf91183a420c7c92a38c2c35 to your computer and use it in GitHub Desktop.
Binary data wrapper for C++14 (Remove constexprs for C++11)
#include <cstddef>
#include <utility>
#include <iterator>
template<typename T>
struct Binary {
union {
T value;
char bin[sizeof(T)];
};
template<typename... Args>
Binary(Args&&... args) : value {std::forward<Args>(args)...} {}
~Binary() { value.~T(); }
constexpr operator T() { return value; }
constexpr char* begin() { return std::begin(bin); }
constexpr char* end() { return std::end(bin); }
constexpr const char* begin() const { return std::begin(bin); }
constexpr const char* end() const { return std::end(bin); }
constexpr const char* cbegin() const { return std::cbegin(bin); }
constexpr const char* cend() const { return std::cend(bin); }
constexpr std::size_t size() const { return sizeof(T); }
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment