如何实例化和访问boost mpl类型?

时间:2014-10-01 02:34:50

标签: c++ boost boost-mpl

所以我构建了我的boost::mpl::map对象,其中包含一些键和类型的混合。我现在想要实例化地图的一个实例,以便我在地图中对每个type进行实例化:

using namespace boost::mpl;
using MyMap = map<
  pair<int, double>,
  pair<double, double>,
  pair<bool, int>>;

int main()
{
  // create the map:
  MyMap myMap;
  // now I want a reference to the element indexed by "int"
  using RefType = at<MyMap, int>::type&;

  RefType myRef(myMap); // compile error!
}

我得到的错误是:

  

错误:无法转换&#39; MyMap {aka map&lt; ...&gt;}到blarghh {aka int}

显然我应该得到某种&#34;索引&#34;价值(也许boost::mpl::map::order?)。那么如何在这些关联mpl容器中实际访问(即获取引用)元素?另外,关于如何(单独)完成的文档在哪里?

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  • 没有#includes。缺少<boost/mpl/at.hpp>是一个问题。
  • 地图中的对之间没有逗号。
  • 您正在尝试将地图创建为值,这没有意义。我不知道该怎么做MyMap myMap。您通常不会实例化MPL类型。

此代码有效,希望它大致是你想要的。

#include <boost/mpl/map.hpp>
#include <boost/mpl/at.hpp>

using namespace boost::mpl;
using MyMap = map<
  pair<int, double>,
  pair<double, double>,
  pair<bool, int>>;

int main()
{
  using RefType = at<MyMap, int>::type&;

  double foo;
  RefType myRef(foo);
}