主要是为了记录指针指向的数据的列表初始,是如何通过参数列表初始化进行传递的。
#include<iostream>
using namespace std;
#include<vector>
#include<memory>
template<typename T> class Blob
{
public:
typedef T value_type;
typedef typename std::vector<T>::size_type size_type;
Blob();
Blob(std::initializer_list<T> il);
size_type size() const {
return data->size(); }
bool empty() const {
return data->empty(); }
void push_back(const T& t) {
data->push_back(t); }
void push_back(T&& t) {
data->push_back(std::move(t)); }
void pop_back();
T& back();
T& operator[](size_type i);
private:
std::shared_ptr<std::vector<T>> data;
void check(size_type i, const std::string& msg) const;
};
template<typename T>
void Blob<T>::check(size_type i, const std::string& msg) const
{
if (i >= data->size()) {
throw std::out_of_range(msg);
}
}
template<typename T>
T& Blob<T>::back()
{
check(0, "back on empty Blob");
return data->back();
}
template<typename T>
T& Blob<T>::operator[](size_type i)
{
check(i, "subscript out of range");
return (*data)[i];
}
template<typename T>
void Blob<T>::pop_back()
{
check(0, "pop_back on empty Blob");
data->pop_back();
}
template<typename T>
Blob<T>::Blob():data(std::make_shared<std::vector<T>>()){
}
template<typename T>
Blob<T>::Blob(std::initializer_list<T> il):data(std::make_shared<std::vector<T>>(il)){
// 指针指向的参数在初始化列表中的传递
size_type sz = (*data).size();
for (size_type i = 0; i < sz; i++) {
cout << i<<": " << (*data)[i] << endl;
}
}
int main()
{
Blob<int> ia;
Blob<int> ia2{
1,2,4,5,6 };
Blob<string> ia3{
"hablee","yuki" };
return 0;
}