在C++中,如果一个可变参数的函数需要传递给另一个可变参数函数时,需要将一个可变参数的函数的可变部分参数传递给另一个可变参数函数,需要利用va_list来获取可变参数部分。关于va_list的相关介绍就不展开说了,网上一堆的资料。
下面直接看案例:
#include <stdarg.h>
#include <stdio.h>
void logMessage(const char* fmt, ...)
{
char buff[4096];
FILE* fp;
int ret;
va_list args;
va_start(args, fmt);
vsnprintf(buff, 4096, fmt, args);
va_end(args);
ret = fopen_s(&fp,"c:\\temp\\vslog.txt", "a+");
if (!ret)
fprintf_s(fp, buff);
fclose(fp);
printf(buff);
}
上面案例中的代码,logMessage函数是个可变参数函数,vsnprintf是系统提供的可变参数函数,通过va_list实现了这2个函数的可变参数传递。当然vsnprintf也可以替换为一个其他的如自定义的可变参数函数。