如何插入Boost MPL地图

时间:2012-11-02 15:54:02

标签: c++ boost template-meta-programming

我设法使用Boost MPL向量和列表就好了,但我无法弄清楚地图。当我尝试插入一个时,我得到了来自clang 3.1的“太少的论点”(gcc 4.7说了类似的东西)。有一个insert版本,其中第二个参数是POS,应该被忽略,所以我尝试在那里插入一个虚拟类型(int),但这只会给出一个新的和令人困惑的错误。

include <iostream>

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

using namespace boost;
using namespace mpl;

int main(){

  typedef pair<int_<3>, int_<6>> obj;

  std::cout << key_type<map<>, obj >::type::value << std::endl; //works

  std::cout << has_key<insert<map<>, obj>::type, obj)::type::value << std::endl; //complains on "too few template arguments for class template 'insert'

  std::cout << has_key<insert<map<>, int, obj>::type, obj)::type::value << std::endl; // gives "implicit instantiation of undefined template 'boost::mpl::insert<..."
}

即使有铿锵声,MPL错误也不是很有用,所以我只是不明白我在做错了什么?我确信这是愚蠢的事。

http://www.boost.org/doc/libs/1_51_0/libs/mpl/doc/refmanual/map.html

1 个答案:

答案 0 :(得分:2)

添加

#include <boost/mpl/insert.hpp>

和正确的括号,从')'到'&gt;'

http://liveworkspace.org/code/afb6632c3eb800412ea551f50c07fb0a