Re: boost::function_types::parameter_types 怎麼 …

看板C_and_CPP作者 (眠月)時間15年前 (2010/09/09 00:11), 編輯推噓1(108)
留言9則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《yoco315 (眠月)》之銘言: : boost::function_types::parameter_types<int(int,double)>::type : 可以取到 mpl::vector2<int, double> : 實在很好奇他是怎麼做到的 竟然弄懂了應該自己來回覆一下 ._. 其實懂了之後就覺得很簡單了, 我簡化一下 boost 的碼,只保留精神就好。 // 一般型,不重要。 template < typename FunctionType > struct parameter ; // 一個參數的特化版本 template < typename ReturnType, typename ParamType0 > struct parameter_types< ReturnType(ParamType0) > { typedef std::tuple<ParamType0> type ; } ; // 兩個參數的特化版本 template < typename ReturnType, typename ParamType0, typename ParamType1 > struct parameter_types< ReturnType(ParamType0, ParamRype1) > { typedef std::tuple<ParamType0, ParamType1> type ; } ; 就只是這樣: 在每個不同數目參數的特化版本, 手動去指定 result type 是什麼, 沒有任何神祕技巧。 暴力法下去做 -_- 如果要支援到 50 個參數,就有 50 個特化版本。 怪不得我原先怎麼想都想不出來... -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.112.24

09/09 00:20, , 1F
會不會code bloat啊~~~~~
09/09 00:20, 1F

09/09 00:26, , 2F
我自high而已 除非亂傳一堆arg 不然不會instantiate架多XD
09/09 00:26, 2F

09/09 00:26, , 3F
boost 實際的實作用了很多很噁心的 macro
09/09 00:26, 3F

09/09 00:26, , 4F
code size 是還好,但是我猜他後面也是用 generator 生的
09/09 00:26, 4F

09/09 00:27, , 5F
我想也是 資訊人不應該做這種重複的工作XDD
09/09 00:27, 5F

09/09 00:27, , 6F
喔喔 原來你是說 obj code XD
09/09 00:27, 6F

09/09 00:31, , 7F
所以還是等0x的Variadic templates吧...
09/09 00:31, 7F

09/09 00:41, , 8F
不用等了,主要的兩家都已經有了,早就在用了 qq
09/09 00:41, 8F

09/09 00:46, , 9F
看到一堆巨集硬幹就暈了 @_@
09/09 00:46, 9F
文章代碼(AID): #1CXxN1lo (C_and_CPP)
文章代碼(AID): #1CXxN1lo (C_and_CPP)