Tôi đang tìm cách làm điều này trong C/C++.Làm thế nào để bọc một hàm với các đối số độ dài thay đổi?
Tôi đã xem qua Variable Length Arguments nhưng điều này gợi ý giải pháp với Python & C bằng cách sử dụng libffi.
Bây giờ, nếu tôi muốn quấn printf
chức năng với myprintf
Những gì tôi làm là như dưới đây:
void myprintf(char* fmt, ...)
{
va_list args;
va_start(args,fmt);
printf(fmt,args);
va_end(args);
}
int _tmain(int argc, _TCHAR* argv[])
{
int a = 9;
int b = 10;
char v = 'C';
myprintf("This is a number: %d and \nthis is a character: %c and \n another number: %d\n",a, v, b);
return 0;
}
Nhưng kết quả không như mong đợi!
This is a number: 1244780 and
this is a character: h and
another number: 29953463
Bất kỳ điểm nào tôi đã bỏ lỡ ??
Câu trả lời cho câu hỏi này là _very_ khác với C++ 11. –
@MooingDuck Thật vậy, tôi đã thêm một câu trả lời 'Variadic templates', bạn có nghĩ rằng có một cách hay hơn trong C++ 11 không? –
@MooingDuck Chức năng vararg không phải là hàm mẫu variadic. Chúng khác nhau về bản chất và chủng loại. – rubenvb