标题里不大讲得清楚,所以就在这里详细说一下。
先看看 map 列表赋值:
map<char,string> escape_map = {
{'1',"11"},
{'2',"22"},
{'3',"33"},
};
我知道 map 内部的元素其实是 pair<T1,T2>,现在我也想自己实现一个类似的玩意,细节是这样的(不是原始需求,为了说清楚做了改动)。
首先有一个 class :
class book
{
string bookname;
double price;
string author;
};
然后我需要实现一个函数,通过列表传参把这些 book object 写入一个 list 。
class book
{
string bookname;
double price;
string author;
};
list<book> book_list;
void add_book(initialzer_list<book> _book_list)
{
//这里卡住了
//如何把 initialzer_list 里的花括号括起来的元素转变成 book object ?
//就像 map 的 initialzer_list 里把花括号里的元素转变为 pair?
}
add_book(
{"book1",1,"author1"},
{"book2",2,"author2"},
);
1
SuperFashi 2016-06-29 12:27:38 +08:00 via Android
|
2
fyyz OP |
3
Archangel_SDY 2016-06-29 13:51:55 +08:00
|
4
jasonlz 2016-06-29 13:59:29 +08:00
首先是 initializer_list ,拼写错误。
然后 initializer_list<T> 花括号里的值是需要实例化的,你的需求是用未实例化的 initializer_list<T>来实例化每个 T 元素?这显然是违规操作。 不知道你的目的是什么,如果是想通过 initializer_list 来初始化一组 T ,你可以这样: class book { string bookname; double price; string author; public: book(string _bookname, double _price, string _author): bookname(_bookname), price(_price), author(_author) {} }; list<book> book_list{ new book("book1",1,"author1"), new book("book2",2,"author2") }; |
5
fyyz OP @Archangel_SDY 谢谢你提供的范例,很简洁易懂 :)
|
7
fyyz OP |
8
SuperFashi 2016-06-29 15:05:42 +08:00 via Android
@fyyz
我说的是,你去看看那个网页下面有样例代码,如果你非要用 initializer_list 的话。 还有,对于 class 的初始化完全可以直接用 4 楼的方式写出来,而且如果是 public 的话可以直接用(book){"book1", 1, "author1"}这种方式建立实例,然后用对 list 的普通操作例如 insert 或者 push_back 放到 book_list 里面。 |