接受N个参数的c++方法
C++ method that takes N parameters
说我有我的一个类与foo(…)方法,其中:
… =>表示可变数目的参数
我想把所有的形参保存在std::vector中。
我试过了:
std::vector<std::string> A::foo(...) {
std::vector<std::string> list;
va_list args;
va_start(args, 0);
for ( ; /* which condition to exit? */ ; ) {
std::string s = va_arg(args, char*);
list.push_back(s);
}
return list;
}
显然这不能工作,但我不知道如何填充s字符串并理解何时退出循环。
在main中我将这样调用foo:
foo("param0", "param1", "param2", ... , "paramN")
您应该以某种方式传递给函数的参数计数。例如,看看int printf ( const char * format, ... );
。该函数解析格式字符串并确定提供了多少参数。你可以这样修改你的代码:
std::vector<std::string> A::foo(size_t count, ...) {
std::vector<std::string> list;
va_list args;
va_start(args, 0);
for ( size_t i = 0; i < count; ++i ) {
std::string s = va_arg(args, char*);
list.push_back(s);
}
return list;
}
写A::foo
的正确方法是把它写成c++ 11可变模板:
template<typename... Args>
std::vector<std::string> A::foo(Args&& ...args) {
return {std::forward<Args>(args)...};
}
如果没有这个选项,您可以使用默认参数接受最多固定数量的参数:
std::vector<std::string> A::foo(
const char* arg1 = 0,
const char* arg2 = 0,
// ...
const char* arg10 = 0)
{
std::vector<std::string> ret;
if (arg1) ret.push_back(arg1); else return ret;
if (arg2) ret.push_back(arg2); else return ret;
// ...
if (arg10) ret.push_back(arg10); else return ret;
return ret;
}
您可以使用预处理库,例如Boost。预处理器,用于自动生成重复参数和参数处理程序。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 通过方法访问结构
- 最小硬币更换问题(自上而下方法)
- C++为构建时间获取QDateTime的可靠方法
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 处理多个异常集合的C++方法
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 有什么方法可以遍历结构吗
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- 使用std::函数映射对象方法
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- C++从另一个类访问公共静态向量的正确方法是什么
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 没有为自己的结构调用列表推回方法
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 枚举环境变量的惯用C++14/C++17方法
- 初始化具有非默认构造函数的std::数组项的更好方法