gpt4 book ai didi

c++ - 使用 mpl::transform 生成新序列

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:53:35 25 4
gpt4 key购买 nike

我正在尝试生成一些将索引映射到类型的通用配置处理代码,使用内部格式如下的 fusion::map:

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

为了简化 map 的生成,我有以下代码:

#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 不兼容?

最佳答案

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

阅读此解释 Where and why do I have to put the "template" and "typename" keywords?

关于c++ - 使用 mpl::transform 生成新序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120985/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com