首页 > 解决方案 > 如何在构造函数参数中初始化`std::set`?

问题描述

我有一个以 astd::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>在调用构造函数之前创建一个实例是不切实际的。如果有办法做到这一点,我愿意接受。

研究:
在互联网上搜索得到了有关将 an 实例初始化std::set为单独语句的示例,而不是参数初始化。

我之前对这个概念的尝试是unsigned int对初始化列表中的值进行按位或运算。我正在“升级”以使用std::set.

环境:
编译器:Visual Studio 2017
平台:Windows 10 和 Windows 7

标签: c++constructorinitializer-liststdsetenum-class

解决方案


您的伪代码是有效的 C++11 - 它正在std::initializer_list调用std::set. wandbox.org 上的实时示例


推荐阅读