使用 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时不可插入吗?

如何将 boost::hana::tuple 转换为 std::variant

boost::factory 和 std::function