Я пытаюсь написать рекурсивную функцию с переменными параметрами для копирования моих данных.Но эта функция копирует только последний параметр.Что я делаю не так?
Это вывод:
13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
12 0 0 0 0 0 0 0 0 0 0 0
С уважением.
#include <iostream>
#include <cstdint>
#include <cstring>
using namespace std;
void copy_data(unsigned char* ar, unsigned& offset, int data) {
std::memcpy(ar + offset, (void*)&data, sizeof(data));
offset += sizeof(data);
}
template<class... Args>
void copy_data(unsigned char* ar, unsigned& offset, int data, Args... args) {
if ((sizeof...(Args)) == 0) {
copy_data(ar, offset, data);
}
copy_data(ar, offset, args...);
}
void printf_data(const unsigned char* ar, int s) {
for (int i = 0; i < s; ++i) {
std::cout << (int)ar[i] << " ";
}
std::cout<<"\n";
}
int main() {
unsigned char *arr0 = new unsigned char[16];
unsigned char *arr1 = new unsigned char[12];
int p0 = 10;
int p1 = 11;
int p2 = 12;
int p3 = 13;
unsigned offset = 0;
copy_data(arr0, offset, p0, p1, p2, p3);
offset = 0;
copy_data(arr1, offset, p0, p1, p2);
printf_data(arr0, 16);
printf_data(arr1, 12);
delete [] arr1;
delete [] arr0;
return 0;
}
ОБНОВЛЕНИЕ: исправлена функция
template <typename T>
void copy_data(unsigned char* ar, unsigned& offset, T data) {
std::memcpy(ar + offset, (void*)&data, sizeof(data));
offset += sizeof(data);
}
template <typename T, typename... Args>
void copy_data(unsigned char* ar, unsigned& offset, T data, Args... args) {
copy_data(ar, offset, data);
copy_data(ar, offset, args...);
}