-设置参数X大小的默认initializer_list参数Y,其中X和Y是函数参数

c++: - setting default initializer_list argument Y of size argument X, where X and Y are function parameters

本文关键字:参数 其中 函数 list initializer 设置 默认      更新时间:2023-10-16

考虑以下代码

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

我想这样做,因为通常,我想选择enum类型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});

我可以重载这个函数,但想知道是否有一个很好的通用方法来把它表示为一个函数,而不是传递大小来做到这一点。

你可以使用这个hack:

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

或者做得更好!

相关文章: