作者yoco315 (眠月)
看板C_and_CPP
標題Re: boost::function_types::parameter_types 怎麼 …
時間Thu Sep 9 00:11:43 2010
※ 引述《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