我基本上正在重新设置set容器,我想知道如何将一个括号括起来的初始化列表传递给容器。
mySet<int> myset = {"test", "test 2"};
我试图重载operator =以列表作为参数。
答案 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必须是可访问的。