gpt4 book ai didi

c++ - boost::mpl::map 失败 boost::mpl::equal?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:45:48 27 4
gpt4 key购买 nike

Boost MPL 文档指出 boost::map::equal

"如果两个序列 Seq1 和 Seq2比较 _element_ _element_ 时是相同的。

但似乎没有检查关联序列映射是否相等元素_wise_:

下面的演示将展示这一点:Map2 应该等于 Map3,它们都递增“key”处的“int_<1>”value_type。查看定义 Map3 的 typedef。大小和唯一的元素被转储到演示中:

#include<iostream>
#include<boost/mpl/map.hpp>
#include<boost/mpl/at.hpp>
#include<boost/mpl/insert.hpp>
#include<boost/mpl/erase_key.hpp>
#include<boost/mpl/pair.hpp>
#include<boost/mpl/int.hpp>
#include<boost/mpl/plus.hpp>
#include<boost/mpl/equal.hpp>
#include<boost/mpl/size.hpp>
#include<boost/mpl/front.hpp>

namespace mpl = boost::mpl;
using mpl::int_;

using std::cout;
using std::endl;
using std::is_same;

int main(int argc, char *argv[])
{

typedef int key;

typedef typename mpl::map<mpl::pair<key, int_<1>>> Map;
typedef typename mpl::map<mpl::pair<key, int_<2>>> Map2;

typedef typename mpl::insert<
typename mpl::erase_key<Map,
key>::type,
mpl::pair<key,
typename mpl::plus<int_<1>,
typename mpl::at<Map, key>::type>::type
>::type
>::type Map3;

cout << "equal? " << mpl::equal<Map2,Map3>::type::value << endl;
cout << "size? " << mpl::size<Map3>::value << endl;
cout << "key type at front? " << typeid(mpl::front<Map3>::type::first).name() << endl;
cout << "value type at front? " << mpl::front<Map3>::type::second::value << endl;

cout << "expected size? " << mpl::size<Map2>::value << endl;
cout << "expected key type at front? " << typeid(mpl::front<Map2>::type::first).name() << endl;
cout << "expected value type at front? " << mpl::front<Map2>::type::second::value << endl;

return 0;
}

我正在使用带有 boost 1.51 的 gcc 4.8.1

最佳答案

它没有按预期工作的原因是 mpl::plus<int_<1>, mpl::at<Map, key>::typempl::integral_constant<int, 2> ,而 mpl::int_<2>是不同的类型。

工作版本:

typedef mpl::map<mpl::pair<key, mpl::integral_c<int, 1>>> Map;
typedef mpl::map<mpl::pair<key, mpl::integral_c<int, 2>>> Map2;

typedef mpl::insert<
mpl::erase_key<Map, key>::type,
mpl::pair<key, mpl::plus<mpl::integral_c<int, 1>, mpl::at<Map, key>::type>::type>
>::type Map3;

关于c++ - boost::mpl::map 失败 boost::mpl::equal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18231812/

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