2

考虑以下代码

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()

我想这样做是因为通常我想为初始化列表“值”中的所有值选择枚举类型 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});

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

4

1 回答 1

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});;
}

或者让它变得更好!

于 2013-03-20T15:26:00.390 回答