2017-06-22 7 views
0

誰かが私に以下のアサートが失敗する理由を教えてもらえますか?mpl :: vectorからmpl :: vector <>のキーを生成する

quesiton 1:

typedef mpl::map<mpl::pair<int, unsigned>, mpl::pair<char, unsigned char> > m; 
    typedef mpl::fold<m, mpl::vector<>, mpl::push_back<mpl::_1, mpl::first<mpl::_2>>>::type keys; 
    BOOST_STATIC_ASSERT((std::is_same<boost::mpl::vector<int, char>, keys>::value == 1)); 

質問2: 私は、製品に折り機能マップのキーへのポインタのMPL ::ベクトルを書きたいならば、私はそれがどのように書くべき?

template <typename T> 
pointer_type { 
    typedef T* pointer_type; 
} 
     typedef mpl::fold<m, mpl::vector<>, mpl::push_back<mpl::_1, pointer_type<mpl::first<mpl::_2>>>::type>::pointer_type 
> keys; 

は動作していないようです。 mpl :: _ 2は決して評価されません。

答えて

1

mpl::vectorは、プレC++ 11時代のより便利なタイプです。 mpl::push_back操作では、このようなベクトルは返されませんが、可変のテンプレートを必要とせずに拡大できるシーケンスが返されます。

This小さなテストプログラムは何が返されるかを示します。

詳細な説明はthis答えで見つけることができます。

関連する問題