代码之家  ›  专栏  ›  技术社区  ›  Thomas Matthews

如何在构造函数参数中初始化“std::set”?

  •  -2
  • Thomas Matthews  · 技术社区  · 6 年前

    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});
    

    上述情况将产生通过 标准::集 APPLE, BANANA ,给 class Pie .

    此概念将在以下代码段中使用:

    class Fruit_Pie
    : public Pie
    {
      Fruit_Pie()
        : Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
        { ; }
    };
    

    在上面的代码段中,创建 std::set<Fruits> 在调用构造函数之前是不实际的。如果有一个方法可以做到这一点,我是开放的。


    搜索internet得到了有关初始化 标准::集 作为单独的语句,而不是参数初始化。

    unsigned int 按位或初始值设定项列表中的值。我正在“升级”以使用 标准::集 .

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Vittorio Romeo    6 年前

    std::initializer_list 构造函数重载 std::set . live example on wandbox.org