如何在构造函数参数中初始化`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::setstd::initializer_list 构造函数重载。 live example on wandbox.org