看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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
hilorrk:會不會code bloat啊~~~~~ 09/09 00:20
hilorrk:我自high而已 除非亂傳一堆arg 不然不會instantiate架多XD 09/09 00:26
yoco315:boost 實際的實作用了很多很噁心的 macro 09/09 00:26
yoco315:code size 是還好,但是我猜他後面也是用 generator 生的 09/09 00:26
hilorrk:我想也是 資訊人不應該做這種重複的工作XDD 09/09 00:27
yoco315:喔喔 原來你是說 obj code XD 09/09 00:27
hilorrk:所以還是等0x的Variadic templates吧... 09/09 00:31
yoco315:不用等了,主要的兩家都已經有了,早就在用了 qq 09/09 00:41
loveme00835:看到一堆巨集硬幹就暈了 @_@ 09/09 00:46