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);
}