2

fusion::map次のように内部形式を使用して、インデックスを型にマップする一般的な構成処理コードを生成しようとしています。

fusion::pair< mpl::int_< VALUE >, type >;

マップの生成を簡素化するために、次のコードがあります。

#include <boost/fusion/sequence.hpp>
#include <boost/fusion/container.hpp>
#include <boost/fusion/algorithm.hpp>

#include <boost/mpl/int.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/map.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_reference.hpp>
#include <boost/mpl/for_each.hpp>
#include <boost/mpl/placeholders.hpp>

#include <typeinfo>
#include <string>
#include <iostream>

/// create a fusion map of all parameter data
namespace fusion = boost::fusion;
namespace mpl = boost::mpl;

template < unsigned Idx, typename T >
struct config_param
{
    typedef mpl::int_< Idx > index_value;
    typedef T value_type;
};

template< class T >
struct to_fusion_pair
{
    typedef fusion::pair< typename T::index_value
                        , typename T::value_type > type;
};

typedef mpl::vector< config_param< 10, unsigned >
                   , config_param< 20, std::string >
                   , config_param< 30, bool >
                   , config_param< 40, long >
                   , config_param< 50, std::string >
                   > MySequence;

typedef mpl::transform< MySequence, to_fusion_pair< mpl::_1 > >::type ConvertedSeq;

これはコンパイルされ、期待される結果を生成します。残念ながら、変換の呼び出しをラップしようとすると、多数のエラーが発生します。すなわち:

template< class Seq >
struct to_vector_of_fusion_pair
{
    typedef mpl::transform< Seq, to_fusion_pair< mpl::_1 > >::type type;
};

typedef to_vector_of_fusion_pair<MySequence>::type ConvertedSeq2;

コンパイラ エラーは次のとおりです。

fusion-db.cpp:40: error: type boost::mpl::transform<Seq, to_fusion_pair<mpl_::arg<1> >, mpl_::na, mpl_::na> is not derived from type to_vector_of_fusion_pair<Seq>â
fusion-db.cpp:40: error: expected ; before type

to_vector_of_fusion_pairと互換性がない私の構造の何が問題なのmpl::transformですか?

4

1 に答える 1

2
template< class Seq >
struct to_vector_of_fusion_pair
{
    typedef typename mpl::transform< Seq, to_fusion_pair< mpl::_1 > >::type type;
};

説明については、これをお読みください「template」および「typename」キーワードをどこに、なぜ配置する必要があるのですか?

于 2012-10-29T11:46:24.140 に答える