如何编写函数签名以使用以已填充的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
发布于 2018-08-22 11:49:01
对于默认参数,可以使用初始化程序列表,如下所示:
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 });发布于 2018-08-22 12:16:01
Imho函数签名中的初始化并不好(特别是如果将声明放在头中,而实现放在源文件中,则可能会很烦人)。您可以使用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();
}https://stackoverflow.com/questions/51966067
复制相似问题