C ++的混合型,可变长度参数列表(varargin,* args,...)

时间:2012-04-21 17:07:45

标签: c++ matlab

我正在构建一个最初用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 ++中有多接近这种灵活性?我应该使用任何标准参数列表类吗?

1 个答案:

答案 0 :(得分:1)

如果你只想传递一些(简单)类型的参数,那么std::vector<>作为参数传递是非常简单和容易的。

通常你会创建如下的结构:

struct Option {
    union {
        int Int;
        float Float;
    } Number;
    string String;
};

或者,您可以在Option结构中添加Type字段,以便在switch语句中使用。

在C ++ 11中,甚至可以在联合中使用std :: string,但我不是百分之百确定。

<cstdarg>是另一种解决方案,如果您使用的是vsprintf等C函数,那就太好了。