使用 boost 的 list_of 将 std::list 传递给构造函数不会编译
Posted
技术标签:
【中文标题】使用 boost 的 list_of 将 std::list 传递给构造函数不会编译【英文标题】:Pass std::list to constructor using boost's list_of doesn't compile 【发布时间】:2013-11-22 02:29:48 【问题描述】:我正在尝试这样做:
class bbb
public:
bbb(std::list<int> lst)
;
int main()
bbb b((std::list<int>)boost::assign::list_of<int>(10)(10));
return 0;
并从 g++ 得到以下错误:
some.cc:35: error: call of overloaded 'bbb(boost::assign_detail::generic_list<int>&)' is ambiguous
some.cc:15: note: candidates are: bbb::bbb(std::list<int, std::allocator<int> >)
some.cc:13: note: bbb::bbb(const bbb&)
有没有办法解决这个问题? 请注意,我使用的是 gcc 4.4.6。它不支持整个c++11,所以我正在为c++03编译。
谢谢...
【问题讨论】:
【参考方案1】:代码由 VC++ 2010 编译。我找到了 GCC 的 2 个解决方法(参见下面的代码)。我认为代码没有任何区别,它将由优化的编译器生成,但我更喜欢第一个变体。我不知道转换运算符不起作用的原因。尝试在 boost 论坛上回答。
class bbb
public:
bbb(std::list<int> lst)
;
int main()
//simplest decision
std::list<int> tmp = boost::assign::list_of<int>(10)(10);
bbb b(tmp);
// one line decision
bbb b3((boost::assign::list_of<int>(10)(10)).operator std::list<int> () );
//compiled by VC++ 2010 !!!
bbb b4((std::list<int>)(boost::assign::list_of<int>(10)(10)) );
return 0;
【讨论】:
有趣的是,b4 不能用 g++ 编译,但 b3 可以。以上是关于使用 boost 的 list_of 将 std::list 传递给构造函数不会编译的主要内容,如果未能解决你的问题,请参考以下文章
将 BOOST_FOREACH 与 std::map 一起使用
将 boost 变体与包含 bool 输入的 std::functions 一起使用
如何将 boost::string_view 转换为 std::string_view?
[std :: cin在使用boost :: iostream时不可插入吗?