【发布时间】:2015-12-29 19:54:06
【问题描述】:
我正在尝试构造一个将std::map 作为参数的对象,方法是使用boost 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&)
什么是歧义,它为什么不影响常规函数 makeBlah,据我所知,它与 Blah 构造函数具有相同的签名?
还有没有更好的方法来实现这一点,除了创建一个makeBlah 函数来构造Blah 的对象,就像我必须做的那样?
(顺便说一句,我在单元测试中使用map_list_of 执行此操作,以使测试输入数据的创建更具可读性)
【问题讨论】:
标签: c++ boost constructor stl stdmap