c ++: - 设置size参数X的默认initializer_list参数Y,其中X和Y是函数参数

时间:2013-03-20 14:59:04

标签: c++ function arguments initializer-list

考虑以下代码

enum class VAR_CHANGE{TYPE1, TYPE2, TYP3};
void cell ( const std::initializer_list<double>& values,
            const std::initializer_list<VAR_CHANGE>& change_type = [[[ !!!!!]]] )
{
    // do something
}

我想替换[[[!!!!!]]],以便默认的初始化列表来到

{VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1, ....}

大小

values.size()

我想这样做是因为通常,我想为枚举器列表'values'中的所有值选择枚举类型VAR_CHANGE :: TYPE1。 例如:

cell({1.2, 2.2, 6.7});

实际上是,

cell({1.2, 2.2, 6.7}, {VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE1});

我可以重载函数,但想知道是否有一个很好的通用方法来表示它作为一个函数而不是传递大小来执行此操作。

1 个答案:

答案 0 :(得分:0)

你可以使用这个黑客:

enum class VAR_CHANGE{TYPE1, TYPE2, TYP3};



void cell ( const std::initializer_list<double>& values,
            const std::initializer_list<VAR_CHANGE>& change_type = {} )
{
    if(values.size() > 0 && change_type.size()==0)
    {
        // default
    }
    // do something
}

int main()
{
    cell({12.4, 234.4});
    cell({12.4, 234.4}, {VAR_CHANGE::TYPE1, VAR_CHANGE::TYPE2});;
}

或者做得更好!