【发布时间】:2018-05-04 06:01:43
【问题描述】:
我必须将 std::pair 的 std::string 传递给可变参数函数。 std::pair 在尝试使用 va_arg 宏访问 std::pair 时显示错误 too few arguments for class template "std::pair"。
#include <stdarg.h>
#include <tuple>
#include <string>
using std::pair;
using std::string;
bool EncodeJSonData(pair<string,string> inbulkData ...)
{
va_list args;
va_start(args, inbulkData);
int count = 5;
while(count--)
{
pair<string,string> bulkData;
bulkData = va_arg(args, pair<string,string>); //here is the error
}
va_end(args);
return true;
}
这里缺少什么,
【问题讨论】:
-
您是否考虑过传递成对的容器(例如向量)? C 可变参数函数将允许用户传递他们想要的任何类型,而编译器不会捕获它。此外,它不保证适用于 C++ 字符串(包括这样的对)和大多数其他有趣的类。
-
请不要在 C++ 中使用可变参数函数。相反,请使用至少类型安全的可变参数模板。
-
包括所有需要的标题。
-
应该如何终止?阅读:minimal reproducible example
-
没有可移植的方式来使用可变参数来传递
std::pair<std::string,std::string>。类型是不平凡的。 Vararg是过去的遗物。使用可变参数模板。
标签: c++ stl variadic-functions variadic-macros