如何在构造函数参数中初始化`std::set`?
How to initialize `std::set` in constructor parameter?
我有一个以 std::set
作为参数的结构。
如何初始化构造函数参数中的集合?
这是一个最小的概念示例。实际实现要大得多。
#include <set>
enum class Fruits
{
APPLE, PEACH, BANANA, STRAWBERRY, LEMON
};
class Pie
{
public:
Pie(const std::set<Fruits>& flavors)
: m_flavors(flavors)
{
}
std::set<Fruits> m_flavors;
};
int main()
{
// What is syntax for initialization here?
Pie p(std::set<Fruits> {Fruits::APPLE, Fruits::BANANA});
return 0;
}
objective 是为了能够在参数列表中指定 set
的值。
在伪代码中:
Pie p({Fruits::APPLE, Fruits::BANANA});
上面的代码会传递一个 std::set
,用 APPLE, BANANA
初始化,给 class Pie
的构造函数。
这个概念将用在以下片段中:
class Fruit_Pie
: public Pie
{
Fruit_Pie()
: Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
{ ; }
};
在上面的代码片段中,在调用构造函数之前创建 std::set<Fruits>
的实例是不切实际的。如果有办法做到这一点,我愿意接受。
研究:
在互联网上搜索导致有关将 std::set
的实例初始化为单独语句的示例,而不是参数初始化。
我之前对这个概念的尝试是使用 unsigned int
和按位或初始化列表中的值。我是 "upgrading" 使用 std::set
。
环境:
编译器:Visual Studio 2017
平台:Windows 10 和 Windows 7
您的伪代码是有效的 C++11 - 它正在调用 std::set
的 std::initializer_list
构造函数重载。 live example on wandbox.org
我有一个以 std::set
作为参数的结构。
如何初始化构造函数参数中的集合?
这是一个最小的概念示例。实际实现要大得多。
#include <set>
enum class Fruits
{
APPLE, PEACH, BANANA, STRAWBERRY, LEMON
};
class Pie
{
public:
Pie(const std::set<Fruits>& flavors)
: m_flavors(flavors)
{
}
std::set<Fruits> m_flavors;
};
int main()
{
// What is syntax for initialization here?
Pie p(std::set<Fruits> {Fruits::APPLE, Fruits::BANANA});
return 0;
}
objective 是为了能够在参数列表中指定 set
的值。
在伪代码中:
Pie p({Fruits::APPLE, Fruits::BANANA});
上面的代码会传递一个 std::set
,用 APPLE, BANANA
初始化,给 class Pie
的构造函数。
这个概念将用在以下片段中:
class Fruit_Pie
: public Pie
{
Fruit_Pie()
: Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
{ ; }
};
在上面的代码片段中,在调用构造函数之前创建 std::set<Fruits>
的实例是不切实际的。如果有办法做到这一点,我愿意接受。
研究:
在互联网上搜索导致有关将 std::set
的实例初始化为单独语句的示例,而不是参数初始化。
我之前对这个概念的尝试是使用 unsigned int
和按位或初始化列表中的值。我是 "upgrading" 使用 std::set
。
环境:
编译器:Visual Studio 2017
平台:Windows 10 和 Windows 7
您的伪代码是有效的 C++11 - 它正在调用 std::set
的 std::initializer_list
构造函数重载。 live example on wandbox.org