已填充 QSet 作为可选参数

Already filled QSet as optional parameter

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

您可以像这样使用初始化列表作为默认参数:

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

恕我直言,在函数签名中进行初始化并不好(特别是如果您将声明放在 header 中并将实现放在源文件中,这可能会很烦人)。您可以使用 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();
}