6

このコード:

std::vector<int>(boost::assign::list_of<int>(1)(2)(3));

エラーが発生します:

main.cpp: In member function 'void <unnamed>::RequestHandler::processRequest(Foo&, Bar, unsigned int, unsigned int*, const char*, boost::shared_ptr<Baz::IOutput>&)':
main.cpp:450: error: call of overloaded 'vector(boost::assign_detail::generic_list<int>&)' is ambiguous
/4.4.2/bits/stl_vector.h:241: note: candidates are: std::vector<_Tp, _Alloc>::vector(const std::vector<_Tp, _Alloc>&) [with _Tp = int, _Alloc = std::allocator<int>]
/4.4.2/bits/stl_vector.h:227: note:                 std::vector<_Tp, _Alloc>::vector(size_t, const _Tp&, const _Alloc&) [with _Tp = int, _Alloc = std::allocator<int>]
/4.4.2/bits/stl_vector.h:215: note:                 std::vector<_Tp, _Alloc>::vector(const _Alloc&) [with _Tp = int, _Alloc = std::allocator<int>]

gcc 4.4.2 用にコンパイルした場合。

どうすればこの問題を解決できますか? 最終的に、私は以下をコンパイルしようとしています:

using namespace std;
using namespace boost::assign;

typedef boost::variant<vector<bool>, vector<int>, vector<string> > Container;

vector<pair<string, Container > > v =
            list_of(pair<string, Container >("Scotland",Container(vector<int>(list_of<int>(1)(2)(3)))))
            (pair<string, Container >("Sweden",Container()));

これは同じ理由で失敗します。

私のアプリケーションには、単体テストの目的でデータ構造を設定することが含まれます。多くの push_backs などを行う必要があるのではなく、初期化を明確にしたい.

アップデート:

ここに修正があります:

std::vector<std::pair<std::string, Container > > v =
    boost::assign::list_of(std::pair<std::string, Container >("Scotland",Container(boost::assign::list_of(1)(2)(3).convert_to_container<std::vector<int> >())))
    (std::pair<std::string, Container >("Sweden",Container()));

これはとても醜いです。これを明確にするために私は何ができるでしょうか。私の単体テストはヘッダー ファイルのみに記述されているため、使用しませんusing namespace

4

1 に答える 1

3

これは、VS2010 の list_of を使用した Ambiguous 呼び出しの複製です。Boost.Assign は、C++03 標準ライブラリを対象として作成されました。C++11 で変更され、Boost.Assign は更新されていません。バグレポートはこちらです。

于 2013-04-26T14:22:49.037 に答える