c++无限参数数组
C++ unlimited parameters to array
我有一个函数,签名如下
char requestApiCall(int num, const wchar_t* pParams = 0, ...)
{
...
}
现在我想在一个数组中获得所有的pParams(或者能够迭代它)。我知道这是可能的一些宏,但我不知道如何做到这一点。
如有任何帮助,不胜感激。
注:如果需要的话,我正在使用MinGW。
我的问题引起了混乱。我将尽力澄清(对不起我的语法)。Object Pascal和c#都能够向一个方法传递无限数量的参数。在c#中,我们通过params关键字: 来实现这一点
void Foo(params string[] strs)
{
...
}
Foo("first", "second", "another one", "etc");
我想在c++中实现相同的结果,而不使用任何对象/类。在我的情况下,类型安全不是一个问题,但如果有一种类型安全的方式来实现这一目标,我将很高兴听到你的评论:)
谢谢
您需要查看stdarg.h
中声明的函数和宏。这里有一个教程来解释它。
我不确定你的函数参数应该代表什么,但我认为你会发现它需要改变。
顺便说一下,我发现对于c++,我通常可以避免变进函数。这样做的好处是可以保持类型安全。你确定你真的需要一个可变函数吗?使用可变函数参数是一件危险而棘手的事情,几乎可以肯定有更好的方法—例如,您可以将std::vector<std::wstring>&
传递给您的函数!
好了,这就是如何使用可变参数。关键是你有责任知道参数的数量和类型!
#include <cstdarg>
char requestApiCall(int num, const wchar_t* pParams, ...)
{
va_list ap; // the argument pointer
va_start(ap, pParams); // initialize it with the right-most named parameter
/** Perform magic -- YOU have to know how many arguments you are getting! **/
int a = va_arg(ap, int); // extract one int
double d = va_arg(ap, double) // one double
char * s = va_arg(ap, char*) // one char*
/* ... and so forth ... */
va_end(ap); // all done, clean up
}
为了完整起见,我将这个函数重新定义为:
char requestApiCall(std::vector<std::wstring> & params)
{
for (std::vector<std::wstring>::const_iterator it = params.begin(), end = params.end(); it != end; ++it)
{
// do something with *it
}
/* ... */
}
您试图完成的一个很好的例子是exec函数族。Exec()接受一个变量参数列表,所有参数都应该是const char*。最后一项是NULL ((char*)0)。最后一项是项目列表何时完成的指示器。
您可以像其他人描述的那样在stdargs.h中使用可变宏。
相关文章:
- C++函数模板需要 &for 数组参数
- C++ 数组参数不起作用
- 使用数组参数进行函数专用化
- 为什么我的数组参数的方法无法正常工作?(C )
- SWIG - Java 代理类数组参数
- 在 gcc 中使用数组参数编译外部"c"代码
- 从 VB6 调用的 C++ DLL 函数中的输出数组参数
- 如何根据数组参数项类型重载 IDL 中的函数
- 引用谷歌测试/模拟框架中的数组参数
- C++将数组参数传递给函数
- 字符星形数组参数未正确终止
- 如何将德尔菲的"字符串数组"参数翻译成C++?
- 为什么 gcc 无法推断数组参数的模板化大小?(C++11)
- 使用 const char 数组参数分析 constexpr 显示运行时执行
- C++指针数组参数
- 固定大小的多维数组参数
- 为什么数组参数被视为常量数组
- 如何在pgsql中格式化数组参数
- C++字符数组参数在x86编译中包含奇怪的字符
- 对象数组参数 - 错误:字段“字母”的类型不完整