Следующий код работает как задумано:
template <typename T>
inline char* Utils::PushData(char* destination, T data)
{
memcpy(destination, &data, sizeof(data));
destination += sizeof(T);
return destination;
}
Однако, когда я использую это:
template <typename T>
inline char* Utils::PushData(char* destination, T data)
{
memcpy(destination, &data, sizeof(T));
destination += sizeof(T);
return destination;
}
модель, которую я строю, испорчена.Почему это случилось?Конечно, sizeof(T)
и sizeof(data)
должны быть одинаковыми, верно?Или я неправильно понял, что sizeof
на самом деле получает размер?
edit
Меня это не особо беспокоило, я просто думал, что это странно.Я использую memcpy
, потому что мне нужно убедиться, что мои данные упакованы без заполнения, я также доверяю себе (единственному человеку, который будет использовать этот код, если я не решу использовать его дальше), чтобы знать, использовать его только сбазовые типы, и я даже не вызываю эту функцию напрямую, я бы вызвал функцию, которая бы принимала данные в формате, который более понятен из вызывающего местоположения.Я бы назвал эту функцию шаблона, используя что-то вроде ...
inline char* Utils::PushXYZ(char* destination, float xValue, float yValue, float zValue)
{
destination = PushData<float>(destination, xValue);
destination = PushData<float>(destination, yValue);
return PushData<float>(destination, zValue);
}