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}*/)
    { ; }
};