特定の変数を使用して他のデータを格納する唯一の正しい方法は、データをバイト単位でコピーすることです。
template <typename T>
void store(unsigned char * & p, T const & val)
{
static_assert(sizeof(unsigned char *) >= sizeof(T));
char const * q = reinterpret_cast<char const *>(&val);
std::copy(q, q + sizeof(T), reinterpret_cast<char *>(&p));
}
使用法:
unsigned char * p;
store(p, 1.5);
store(p, 12UL);
一致する検索機能:
template <typename T>
T load(unsigned char * const & p)
{
static_assert(sizeof(unsigned char *) >= sizeof(T));
T val;
char const * q = reinterpret_cast<char const *>(&p);
std::copy(q, q + sizeof(T), reinterpret_cast<char *>(&val));
return val;
}
使用法:
auto f = load<float>(p);