Okej, mam pytanie dla pewnosci zrozumienia problemu.
Chciałbyś "zserializować" typ generyczny "Word" do postaci bajtów w stringu, a później wykonać operację odwrotną?
Jeżeli tak to jest kilka rzeczy dla których ten mechanizm nie będzie działał poprawnie i uniwersalnie:
1) Dla typów przekazanych przez wartość
- Typ atomowy - da się to wykonać
- Typ obiektowy nie zawierający w sobie obiektów dynamicznych - da się to wykonać
- Typ obiektowy zawierający w sobie obiekty dynamiczne - NIE da się wykonać
2) Dla typów wskaźnikowych nie da się tego wykonać.
Twoja obecna implementacja jest równiez nie odporna na przypadki które podałem.
Poniższy kod powinien działać dla typów prostych oraz dla typów obiektowych przekazanych przez wartość i nie zawiarających w sobie elementów dynamicznych.
template <typename T>
std::string write_word(T value)
{
unsigned int sizeOfType = sizeof(T);
const char* pSrc = reinterpret_cast<const char*>(&value);
std::string output(pSrc, sizeOfType);
return output;
}
template <typename T>
T read_word(const std::string& s)
{
T output;
unsigned int sizeOfType = sizeof(T);
size_t sizeOfInputData = s.size();
if (sizeOfType != sizeOfInputData)
throw std::exception("Incorrect input data!");
memcpy(&output, s.data(), sizeof(T));
return output;
}