2016-02-03 54 views
3

我基本上是重新设置容器,我想知道如何通过大括号封装的初始化程序列表到容器。C++自定义容器通过{}列表

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

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

回答

2

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

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

你需要实现一个构造函数,采取std::initializer_list作为它的参数,如:

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

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

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

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