Re: boost::function_types::parameter_types 怎麼 …
※ 引述《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
09/09 00:20, 1F
→
09/09 00:26, , 2F
09/09 00:26, 2F
→
09/09 00:26, , 3F
09/09 00:26, 3F
→
09/09 00:26, , 4F
09/09 00:26, 4F
→
09/09 00:27, , 5F
09/09 00:27, 5F
→
09/09 00:27, , 6F
09/09 00:27, 6F
→
09/09 00:31, , 7F
09/09 00:31, 7F
→
09/09 00:41, , 8F
09/09 00:41, 8F
推
09/09 00:46, , 9F
09/09 00:46, 9F
討論串 (同標題文章)