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