2014-10-01 51 views
0

所以我建立了我的boost::mpl::map对象,其中包含一些键和类型的混合。我现在要实例地图的实例,例如,我在地图上的每个type的一个实例:如何实例化并访问boost mpl类型?

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! 
} 

我得到的错误是沿着线的东西:

error: cannot convert 'MyMap {aka map<...>} to blarghh {aka int}

很明显,我应该获得某种“索引”值(可能是boost::mpl::map::order?)。那么,如何实际访问(即获得引用)这些关联的mpl容器中的元素?另外,这个(特别是)如何完成的文档在哪里?

回答

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); 
} 
+0

对不起,我修复了丢失的逗号。我想实例化地图,使得我有一组实例化的所有'types',然后我想引用其中一个值(为了这个例子)。 'std'等价物可能会创建一个'tuple'的实例并获得对其实例化类型之一的引用。这有意义吗?据我了解,你的例子只是创建一个双精度和对它的引用。 – arman 2014-10-01 03:12:27

+0

我在想也许我需要为此加强融合?在那种情况下,我的下一个问题是,我如何将我的'boost :: mpl :: map'转换为'boost :: fusion :: map',然后我可以实例化? – arman 2014-10-01 03:19:42

+0

你试图完成的更高层次的目标是什么?我很难理解你为什么需要'{type:default-constructed-other-type}'的映射。 – 2014-10-01 05:47:13