问题描述
我想创建一个函数,该函数会将信息记录到文件中。此函数需要获取一些参数,并应对其进行迭代并将其打印到控制台。我有以下代码:
void log(int argnum ...)
{
va_list arguments;
std::string argval;
va_start(arguments,argnum);
for (int i = 0; i < argnum; i++) {
argval = va_arg(arguments,std::string);
std::cout << argval;
}
va_end(arguments);
}
log(10,"somebody","once","told","me","the","world","is","gonna","roll","me");
Visual Studio打开“ memcpy.asm”,并且出现访问冲突错误。知道有什么问题吗?
解决方法
坦率地说,您的代码有点混乱。您声明log
接受类型为int
的参数:
void log(int argnum ...)
然后,您尝试以std::string
的身份获得它们:
argval = va_arg(arguments,std::string);
然后尝试使用类型为int
和const char[]
的参数调用该函数。而且,您似乎对如何处理参数数量有误解。
在大多数情况下,可变参数函数模板是vararg函数的更好选择:
#include <iostream>
template <typename ...T>
void log(const T& ... args)
{
(std::cout << ... << args) << '\n';
}