使用 boost 将 std::list 传递给构造函数,list_of不编译
Pass std::list to constructor using boost's list_of doesn't compile
我正在尝试这样做:
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;
}
相关文章:
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 如何将 std::list of 派生类而不是 std::list of parent class 传递给函数
- 将 std::list of structs 转换为 Python 列表
- 矩阵类:"No instance of overloaded function push_back matches the argument list"
- 如何修复'Size of list( a class) is unknown or zero error'和"声明语法错误"?
- 为什么我会收到错误"parameter pack 'F' must be at the end of the template parameter list"
- 在递归函数中创建 std::list of value 而不是 std::list of 指针
- 将<Point2f> openCV 的向量转换为 Collections::Generic::List<Windows::P oint> of C#
- std::map with iterators to std::list from iterators of std::
- "ISO C++ forbids declaration of 'list' with no type"错误
- "more than one instance of overloaded function " 标准::p ow " matches the argument list"
- MSVC:"use of class template requires template argument list" STL 容器内
- C++:"invalid initialization of non-const reference of type ‘List&’ from a temporary of type ‘List*’"
- "a list of vectors of ints" - 这可能吗?
- "use of class template requires template argument list"错误,即使使用了模板的模板,因此模板类是预期的
- "use of class template requires template argument list"是什么意思?
- 零MQ的"expected ';' at the end of declaration list"错误