C++ 如何合并两个mpl映射以生成新映射?

C++ 如何合并两个mpl映射以生成新映射?,c++,c++11,template-meta-programming,boost-mpl,C++,C++11,Template Meta Programming,Boost Mpl,不管我怎么看下面的代码,似乎有一点我遗漏了。它不会编译。我有两个映射int->int。我想生成第三个int->int映射,其中包含两个原始映射的所有键值对。(VS2013)有人吗 #包括 #包括 #包括 #包括 #包括 #包括 #包括 typedef boost::mpl::map< boost::mpl::pair >::原始类型1; typedef boost::mpl::map< boost::mpl::pair >::原始类型2; typedef boost::mpl::copy< 原文

不管我怎么看下面的代码,似乎有一点我遗漏了。它不会编译。我有两个映射int->int。我想生成第三个int->int映射,其中包含两个原始映射的所有键值对。(VS2013)有人吗

#包括
#包括
#包括
#包括
#包括
#包括
#包括
typedef boost::mpl::map<
boost::mpl::pair
>::原始类型1;
typedef boost::mpl::map<
boost::mpl::pair
>::原始类型2;
typedef boost::mpl::copy<
原文1,
boost::mpl::back_inserter
>::类型合并;
BOOST_MPL_断言((BOOST::MPL::has_key));
int _tmain(int argc,_TCHAR*argv[]
{
const int i=boost::mpl::at::type::value;
返回0;
}

您的代码有两个问题。这里有一个简单的例子:

BOOST_MPL_ASSERT((boost::mpl::has_key<Merged, 7>));
mpl::back\u inserter
是元编程的等价物,它创建了一个输出迭代器,通过
push\u back()
输出。类似地,需要“向后扩展序列”,因为它使用
mpl::push\u Back
mpl::map
不是向后扩展序列。如果您查看它,则没有
推回
,只有
插入
。因此,您需要这样做:

using Merged =
    mpl::copy<
        Original1,
        mpl::inserter<Original2, mpl::insert<mpl::_1, mpl::_2>> // <==
    >::type;
那么你可以写下:

mpl::inserter<Original2, quote<mpl::insert>>
mpl::插入器

@ØyvindRoth别担心。欢迎来到SO。请看
using Merged =
    mpl::copy<
        Original1,
        mpl::inserter<Original2, mpl::insert<mpl::_1, mpl::_2>> // <==
    >::type;
template <template <class... > class F>
struct quote {
    template <class... Args>
    struct apply {
        using type = typename F<Args...>::type;
    };
};
mpl::inserter<Original2, quote<mpl::insert>>