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