使用 boost 将 std::list 传递给构造函数,list_of不编译

Pass std::list to constructor using boost's list_of doesn't compile

本文关键字:list of 编译 构造函数 boost std 使用      更新时间:2023-10-16

我正在尝试这样做:

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编译。

谢谢。。。

该代码由VC++2010编译。我为GCC找到了两个解决方案(请参阅下面的代码)。我认为代码并没有任何区别,它将由优化的编译器生成,但我更喜欢第一个变体。我不知道转换运算符不起作用的原因。试着在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;
}
相关文章: