出于教育目的,我正在重新实施
std::list
。
我在想有没有办法让用户使用这个语法来初始化:
my::list l = {1, 2, 3, 4, 5};
这就是初始化列表的用途。 例如,你可以有一个这样的构造函数:
class list {
public:
list(std::initializer_list<int> l) {
for (int x : l) {
// do something with x
}
}
};
或者通过使用模板使其更通用:
template<typename T>
class list {
public:
list(std::initializer_list<T> l) {
for (const auto &x : l) {
// do something with x
}
}
};
这是我使用可变参数模板的解决方案:
template<typename T>
class my::list {
public:
template<typename... Args>
list(Args... args) { init(args...); }
void push_back(T);
private:
template<typename... Args>
void init(T value, Args... args) {
push_back(value);
init(args...);
}
};
init
函数递归调用自身,并检查第一个值是否为 T
类型,然后将其压入列表中。