私は、を使ってマップの内容を渡すことによって、std::map
をパラメータとして受け取るオブジェクトを作成しようとしています。マップを取得する関数にブーストmap_list_ofを渡すことはできますが、コンストラクタは使用できないのはなぜですか?
これはコンパイルエラーですが、普通の関数で同じ機能を実行しようとするとstd::map
が発生しますが、コンパイルエラーは発生しません。
#include <map>
#include <boost/assign.hpp>
struct Blah
{
Blah(std::map<int, int> data) {}
};
void makeBlah(std::map<int, int> data) {}
int main()
{
Blah b(boost::assign::map_list_of(1, 2)(3, 4)); // Doesn't compile.
makeBlah(boost::assign::map_list_of(1, 2)(3, 4)); // Compiles fine!
}
私が手コンパイルエラーは次のとおりです。
error: call of overloaded ‘Blah(boost::assign_detail::generic_list<std::pair<int, int> >&)’ is ambiguous
note: candidates are: Blah::Blah(std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >)
note: Blah::Blah(const Blah&)
何曖昧で、どのように来る、それは私の知る限り、同じを持っている通常のfunctoinのmakeBlahには影響しません。 Blahのコンストラクタとしての署名?
Blah
のオブジェクトを生成する関数を作成するのに足りないこれを実現する良い方法はありますか? (余談ですが、私はより読みやすいテスト入力データの作成を行うためにmap_list_of
を使用してユニットテストでこれをやっているとして)
'decltype()'を使うことができますが、ブーストコードをダンプしてマップを初期化するために 'initializer_list'を使うことができます。 –