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

関数をオーバーロードすることはできますが、これを行うためにサイズを渡す代わりに、1つの関数として表されるそれを行うための優れたジェネリックな方法があるかどうか疑問に思います。

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 に答える