C++ 递归变分函数

C++ 递归变分函数,c++,c++11,C++,C++11,我试图编写一个带有可变参数的递归函数来复制我的数据。但此函数仅复制最后一个参数。我做错了什么 这是输出: 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*

我试图编写一个带有可变参数的递归函数来复制我的数据。但此函数仅复制最后一个参数。我做错了什么

这是输出:

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;
}
#包括
#包括
#包括
使用名称空间std;
无效复制_数据(无符号字符*ar、无符号和偏移量、整型数据){
标准::memcpy(ar+偏移量,(void*)和数据,大小(数据));
偏移量+=sizeof(数据);
}
样板
无效复制_数据(无符号字符*ar、无符号和偏移量、整型数据、Args…Args){
如果((sizeof…(Args))==0){
复制_数据(应收、抵销、数据);
}
复制_数据(ar、偏移、参数…);
}
void printf_数据(常量无符号字符*ar,int s){
对于(int i=0;istd::cout递归仅在以下情况下输出任何内容:

if ((sizeof...(Args))==0) {
    copy_data(ar, offset, data);
}
只有当你去掉所有的论点,除了最后一个,这才会发生


删除
if
子句。

谢谢你,亚当。它起作用了10 0 0 11 0 0 12 0 0 0 0 0 13 0 0 0 \n 10 0 0 0 11 0 0 12 0 0 0 0注意,你的输出取决于Endianness。@Jarod42 Yeees当然!但在这种情况下,这并不重要。
if ((sizeof...(Args))==0) {
    copy_data(ar, offset, data);
}