1

Boost MPLベクトルとリストをうまく使用できましたが、マップを理解できません。1つに挿入しようとすると、clang 3.1から「引数が少なすぎます」というメッセージが表示されます(gcc 4.7は同様のことを言います)。2番目の引数が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エラーは、clangを使用しても正確には役に立たないので、ここで何が間違っているのかわかりません。ばかげていると思います。

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

4

1 に答える 1

2

追加

#include <boost/mpl/insert.hpp>

')'から'>'までの角かっこを修正します

http://liveworkspace.org/code/afb6632c3eb800412ea551f50c07fb0a

于 2012-11-02T16:00:22.633 に答える