c ++自定义容器传递{}列表

时间:2016-02-03 01:45:22

标签: c++ c++11

我基本上正在重新设置set容器,我想知道如何将一个括号括起来的初始化列表传递给容器。

mySet<int> myset = {"test", "test 2"};

我试图重载operator =以列表作为参数。

3 个答案:

答案 0 :(得分:2)

尽管这里存在=,但这是构建一个集合,所以你需要的是一个构造函数(以std::initializer_list作为参数)。

template<class T>
class myset { 
public:
// ...
    mySet(std::initializer_list<T> init) {
        for (T const &t : init)
            insert(t);
    }
};

答案 1 :(得分:1)

您需要实现一个以std::initializer_list为参数的构造函数,例如:

template <class T>
class mySet {
public:
    mySet(std::initializer_list<T> l) {
        // ...
    }
};

答案 2 :(得分:1)

定义一个以std::initializer_list为参数的构造函数,如

mySet(std::initializer_list<T> args){/*...*/}

operator=仅在作业上调用,而不是在copy initialization(您的情况)上调用。在后一种情况下,在rhs上调用构造函数,然后是复制(或移动),这通常是省略的,但是复制或移动ctors必须是可访问的。