#眉標=Boost #副標=「Boost技術與應用」系列文章(5) #大標= Boost.Tuple    兼談Loki.Tuple(下) #作者=文圖/侯捷 ==本文相關資訊 =========== • 讀者基礎:擁有C++ templates編程經驗與C++標準程式庫使用經驗。 • 本文測試環境:VC7。 • 本系列文章將匯整至編寫中的《Boost運用與源碼剖析》一書。 • 關鍵術語:Boost, Loki, Tuple, TypeList, Template Template Parameters, meta-programming. ================ ==<反灰>=========== namespace boost { ... using tuples::tuple; using tuples::make_tuple; using tuples::tie; using tuples::get; } ================ ==<反灰>=========== tuple obj(-5, 3.14, "obj"); ================ ==<反灰>=========== tuple obj(-5, 3.14, "obj"); ================ ==<反灰>=========== tuple:: tuple(-5, 3.14, "obj") //建構式,3個引數 : inherited(-5, 3.14, "obj", null_type(),null_type(),null_type(), null_type(),null_type(),null_type(),null_type() ) { }; //以上會喚起base class的建構式並帶10個引數 ================ ==<反灰>=========== template struct Typelist { typedef T Head; typedef U Tail; }; #define TYPELIST_1(T1) Typelist #define TYPELIST_2(T1,T2) Typelist #define TYPELIST_3(T1,T2,T3) Typelist ... ================ ==<反灰>=========== template struct map_tuple_to_cons { typedef cons::type > type; }; ================ ==<反灰>=========== template <> struct map_tuple_to_cons { typedef null_type type; }; ================ ==<反灰>=========== tuple obj(-5, 3.14, "obj"); ================ ==<反灰>=========== inherited(-5, 3.14, "obj", null_type(),null_type(),null_type(), null_type(),null_type(),null_type(),null_type() ) ================ ==<反灰>=========== map_tuple_to_cons::type ================ ==<反灰>=========== cons::type > ================ ==<反灰>=========== cons::type >> ================ ==<反灰>=========== cons::type >>> ================ ==<反灰>=========== cons>> ================ ==<反灰>=========== inherited(-5, 3.14, "obj", null_type(),null_type(),null_type(), null_type(),null_type(),null_type(),null_type() ) ================ ==<反灰>=========== cons>> (-5, 3.14, "obj", null_type(),null_type(),null_type(), null_type(),null_type(),null_type(),null_type() ) ================ ==<反灰>=========== cons:: cons(-5,…) //建構式 : head(-5), tail(…,null_type()) //設定head和tail初值 { } ================ ==<反灰>=========== cons:: cons(3.14,…) //建構式 : head(3.14), tail(…,null_type()) { } ================ ==<反灰>=========== cons:: cons("obj",…) : head("obj") { } ================ ==<反灰>=========== tuple obj(-5, 3.14, "obj"); ================ ==更多資訊=========== 以下是更多的延伸讀物或網上資源。 • 《Modern C++ Design》chapter 1,2,3,by Andrei Alexandrescu. A.W. 2001 • 《Beyond the C++ Standard Library, An Introduction to Boost》by Bjorn Karlesson, A.W. 2005. • Boost Libraries Documentation, from http://www.boost.org ================ ==作者簡介 =========== 侯捷 資訊顧問、專欄主筆、大學執教。常著文章自娛,頗示己志。 侯捷網站:http://www.jjhou.com(繁體) 北京鏡站:http://jjhou.csdn.net(簡體) 永久郵箱:jjhou@jjhou.com ================