代码之家  ›  专栏  ›  技术社区  ›  Marcus

已将QSet填充为可选参数

  •  0
  • Marcus  · 技术社区  · 6 年前

    如何编写函数签名以使用可选的 QSet 已填充的参数 QSet公司 作为默认值。

    我试过了,但不行!:(

    enum MyEnum {
        One,
        Two,
        Three,
        Four
    };
    
    void function(int i, QSet<MyEnum> MySet = QSet<MyEnum>() << One << Two << Four);
    

    我还发现这种方法:

    QSet<MyEnum> const& foo();
    void function(int i, QSet<MyEnum> MySet = foo());
    

    但是,我对此不高兴。


    环境:


    C++:11

    2 回复  |  直到 6 年前
        1
  •  4
  •   Azeem Rob Hyndman    6 年前

    可以对默认参数使用初始值设定项列表,如下所示:

    void function(int i, QSet<int> MySet = { 1, 2, 3 });
    

    更新 :

    enum class

    下面是一个例子:

    enum class MyEnum : unsigned int
    {
        ONE = 1,
        TWO,
        THREE,
        FOUR
    };
    
    void function(int i, QSet<MyEnum> MySet = { MyEnum::ONE, MyEnum::TWO });
    
        2
  •  2
  •   463035818_is_not_an_ai    6 年前

    在函数签名中进行初始化是不好的(特别是如果将声明放在头中,而将实现放在源文件中,这可能会很烦人)。你可以用 std::optional

    #include <iostream>
    #include <optional>
    
    void foo(std::optional<int> x = {}) {
        if (!x) { x = 3; } // or get the default value from somewhere
        std::cout << x.value();
    }
    
    int main()
    {
        foo(23);
        foo();
    }