
标题里不大讲得清楚,所以就在这里详细说一下。
先看看 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 里面。 |