Joshua Moerman
14 years ago
commit
a0cff27590
2 changed files with 61 additions and 0 deletions
@ -0,0 +1,52 @@ |
|||
#ifndef BINARY_OUTPUT_HPP |
|||
#define BINARY_OUTPUT_HPP |
|||
|
|||
#include <ostream> |
|||
|
|||
// static_asserts are not too good...
|
|||
|
|||
// Normal
|
|||
template <typename T> |
|||
struct binary{ |
|||
T thing; |
|||
binary(T const t):thing(t){} |
|||
binary(binary const& c):thing(c.thing){} |
|||
}; |
|||
|
|||
template <typename T> |
|||
binary<T> make_binary(T const t){ |
|||
return binary<T>(t); |
|||
} |
|||
|
|||
template <typename T> |
|||
std::ostream& operator<<(std::ostream& out, binary<T> const& rhs){ |
|||
static_assert(std::is_pod<T>::value, "Please specialise this function if your type is not POD"); |
|||
static_assert(!std::is_pointer<T>::value, "Writing pointer"); |
|||
out.write(reinterpret_cast<const char*>(&(rhs.thing)), sizeof(rhs.thing)); |
|||
return out; |
|||
} |
|||
|
|||
// Array
|
|||
template <typename T, size_t N> |
|||
struct binary_arr{ |
|||
T const (& thing)[N]; |
|||
binary_arr(const T (& t)[N]):thing(t){} |
|||
binary_arr(binary_arr const& c):thing(c.thing){} |
|||
}; |
|||
|
|||
template <typename T, size_t N> |
|||
binary_arr<T, N> make_binary(const T (& t)[N]){ |
|||
static_assert(N>=0, "lijp"); |
|||
return binary_arr<T, N>(t); |
|||
} |
|||
|
|||
template <typename T, size_t N> |
|||
std::ostream& operator<<(std::ostream& out, binary_arr<T, N> const& rhs){ |
|||
static_assert(std::is_pod<T>::value, "Please specialise this function if your type is not POD"); |
|||
static_assert(!std::is_pointer<T>::value, "Writing pointer"); |
|||
out.write(reinterpret_cast<const char*>(&(rhs.thing)), sizeof(rhs.thing)); |
|||
return out; |
|||
} |
|||
|
|||
#endif // BINARY_OUTPUT_HPP
|
|||
|
@ -0,0 +1,9 @@ |
|||
#include <iostream> |
|||
#include "binary_output.hpp" |
|||
|
|||
int main(){ |
|||
std::cout << make_binary(1684234849) << std::endl; |
|||
std::cout << make_binary("A c-style array") << std::endl; |
|||
|
|||
return 0; |
|||
} |
Reference in new issue