我正在构建一个最初用MATLAB编写的项目的C ++克隆。我想尽可能地“保存”代码保持尽可能接近原始代码(考虑到像MATLAB这样的动态类型语言和像C ++这样的静态类型语言之间不可避免的差异)。
我的问题是关于变长参数列表作为函数参数,它可以包含混合类型的参数。
MATLAB将varargin
作为函数参数:
varargin Variable length input argument list.
Allows any number of arguments to a function. The variable
varargin is a cell array containing the optional arguments to the
function. varargin must be declared as the last input argument
and collects all the inputs from that point onwards. In the
declaration, varargin must be lowercase (i.e., varargin).
在Python中,*args
和**kwargs
处理得非常轻松。
我在C ++中有多接近这种灵活性?我应该使用任何标准参数列表类吗?
答案 0 :(得分:1)
如果你只想传递一些(简单)类型的参数,那么std::vector<>
作为参数传递是非常简单和容易的。
通常你会创建如下的结构:
struct Option {
union {
int Int;
float Float;
} Number;
string String;
};
或者,您可以在Option结构中添加Type
字段,以便在switch
语句中使用。
在C ++ 11中,甚至可以在联合中使用std :: string,但我不是百分之百确定。
<cstdarg>
是另一种解决方案,如果您使用的是vsprintf
等C函数,那就太好了。