首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已将QSet作为可选参数填充

已将QSet作为可选参数填充
EN

Stack Overflow用户
提问于 2018-08-22 11:40:53
回答 2查看 217关注 0票数 1

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

我试过这个,但没用!

代码语言:javascript
复制
enum MyEnum {
    One,
    Two,
    Three,
    Four
};

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

我还发现这种方法:

代码语言:javascript
复制
QSet<MyEnum> const& foo();
void function(int i, QSet<MyEnum> MySet = foo());

但是,我对此不满意。

环境:

Qt: 5.9.6 C++:11

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-22 11:49:01

对于默认参数,可以使用初始化程序列表,如下所示:

代码语言:javascript
复制
void function(int i, QSet<int> MySet = { 1, 2, 3 });

更新

使用enum class,它也可以正常工作。

下面是一个例子:

代码语言:javascript
复制
enum class MyEnum : unsigned int
{
    ONE = 1,
    TWO,
    THREE,
    FOUR
};

void function(int i, QSet<MyEnum> MySet = { MyEnum::ONE, MyEnum::TWO });
票数 5
EN

Stack Overflow用户

发布于 2018-08-22 12:16:01

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

代码语言:javascript
复制
#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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51966067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档