C++ 如何在构造函数参数中初始化'std::set'?
我有一个将C++ 如何在构造函数参数中初始化'std::set'?,c++,constructor,initializer-list,stdset,enum-class,C++,Constructor,Initializer List,Stdset,Enum Class,我有一个将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
作为参数的构造。如何在构造函数参数中初始化集合 下面是一个简单的概念性示例。实际实现要大得多
#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;
}
上述操作的效果是将一个std::set
(用APPLE,BANANA
初始化)传递给类Pie
的构造函数
此概念将在以下代码段中使用:
class Fruit_Pie
: public Pie
{
Fruit_Pie()
: Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
{ ; }
};
在上面的代码片段中,在调用构造函数之前创建std::set
的实例是不实际的。如果有办法做到这一点,我愿意
研究:通过搜索internet,可以得到关于将
std::set
的实例初始化为单独语句而不是参数初始化的示例
我以前尝试过使用无符号int
和按位或初始值设定项列表中的值。我正在“升级”以使用std::set
环境:编译器:Visual Studio 2017
平台:Windows 10和Windows 7您的伪代码是有效的C++11-它正在调用
std::initializer\u list
的std::set
构造函数重载 您是否仔细查看了初始值设定项列表?set有一个构造函数,它接受初始值设定项列表,您能告诉我们使用Pie p(std::set{Fruits::APPLE,Fruits::BANANA})时收到的错误消息吗代码>?VS 2017是一个C++11编译器,所以它应该可以工作。“在上面的代码段中,在调用构造函数之前创建std::set的实例是不可行的。如果有方法可以做到这一点。”没有得到该语句。@GilsonPJ:在构造函数中,如何在构造函数列表中创建临时变量(或者在调用构造函数之前)。这就是我要指出的。
class Fruit_Pie
: public Pie
{
Fruit_Pie()
: Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
{ ; }
};