我有一个采用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;
}
目标是能够在参数列表中指定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>
的实例是不切实际的。如果有办法做到这一点,我很乐意。
研究:
在Internet上搜索产生了一些示例,这些示例将std::set
的实例初始化为单独的语句,而不是参数初始化。
我以前对这个概念的尝试是使用unsigned int
并对初始值设定项列表中的值进行按位或运算。我正在“升级”以使用std::set
。
环境:
编译器:Visual Studio 2017
平台:Windows 10和Windows 7
答案 0 :(得分:1)
您的伪代码是有效的C ++ 11-它正在调用std::initializer_list
的{{1}}构造函数重载。 live example on wandbox.org