已将QSet填充为可选参数

时间:2018-08-22 11:40:53

标签: c++ qt optional-parameters

如何编写函数签名以使用可选的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());

但是,对此我不满意。


环境:

  

Qt:5.9.6
  C ++:11

2 个答案:

答案 0 :(得分:4)

您可以使用初始化器列表作为默认参数,如下所示:

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

答案 1 :(得分:2)

我不希望在函数签名中进行初始化(特别是如果将声明放在标头中并将实现放在源文件中,这可能会很烦人)。您可以使用std::optional。更简单的示例(因为我没有可用的Qt atm):

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