4

を含む のboost::assignC++11 初期化をエミュレートするために使用しようとしています。std::mapstd::set

#include <set>
#include <map>
#include <stdint.h>

#include <boost/assign/list_of.hpp>

typedef std::map< uint32_t, std::set< uint32_t> > the_map_t;

the_map_t data = boost::assign::map_list_of( 1, boost::assign::list_of(10)(20)(30) )
                                           ( 2, boost::assign::list_of(12)(22)(32) )
                                           ( 3, boost::assign::list_of(13)(23)(33) )
                                           ( 4, boost::assign::list_of(14)(24)(34) );

std::setusingの初期化は、単独で使用すると期待どおりに機能しますが、上記のコードを試してみると、のコンストラクターが呼び出されるboost::assign::list_of時点で割り当てがあいまいになります。std::set

map-assign.cpp:16:   instantiated from here
include/c++/4.4.6/bits/stl_pair.h:101: error: call of overloaded set(const   boost::assign_detail::generic_list<int>&) is ambiguous
include/c++/4.4.6/bits/stl_set.h:188: note: candidates are: 
    std::set<_Key, _Compare, _Alloc>::set(
        const std::set<_Key, _Compare, _Alloc>&) 
        [with _Key = unsigned int, _Compare = std::less<unsigned int>, _Alloc = std::allocator<unsigned int>]

include/c++/4.4.6/bits/stl_set.h:145: note:                 
    std::set<_Key, _Compare, _Alloc>::set(
        const _Compare&, const _Alloc&) 
        [with _Key = unsigned int, _Compare = std::less<unsigned int>, _Alloc = std::allocator<unsigned int>]

このあいまいなエラーを解決するにはどうすればよいですか?

4

1 に答える 1

3

この場合boost::assign::map_list_of、2 番目のテンプレート引数 - のヒントが必要<uint32_t, std::set< uint32_t> >です。したがって、行

the_map_t data = boost::assign::map_list_of(...);

になる

the_map_t data = boost::assign::map_list_of<uint32_t, std::set< uint32_t> >(...);
于 2012-10-29T20:16:34.890 に答える