である理由を誰かが説明できるコードで書かれているものによると、あなたのマップタイプ
key_type<
m,
pair<int, unsigned>
>::type
の発生をカウントしたいと思います。最後に、これは理由MPLの説明でint
です::あなたが見つけるkey_type:
key_type<m,x>::type Identical to x::first;
さて、それでは、あなたのマップの実際の内容が何であるかを見てみましょう。 マップのタイプを書き込むことができますが、タイプを素早く怠惰にチェックする方法を示したいと思います。 :P
私たちは、コンパイラにマップの種類が何であるかを見せないようにします。 私はどこかにこの行を追加することでそれをやった:
typename m::blaa BB;
を(blaa
がmpl::map
型の要素ではないので)当然のコンパイルが次のエラーメッセージで失敗します
error: 'blaa' in 'm {aka struct boost::mpl::map<boost::mpl::pair<int, unsigned int>, boost::mpl::pair<char, unsigned char>, boost::mpl::pair<mpl_::long_<5l>, char [17]>, boost::mpl::pair<int [42], bool> >}' does not name a type
[OK]を、私たちマップにペアのリスト(たとえば、boost::mpl::pair<int, unsigned int>
)、 が含まれていますが、int
は含まれていないことです。そしてあなたのmpl::count
電話であなたはint
を探しています。
std::cout
行を と置き換えると、結果は期待どおりになることがわかります。
std::cout <<
boost::mpl::count< m,
boost::mpl::pair<int, unsigned>
>::type::value
<< std::endl;