2016-02-03 53 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必須是可訪問的。