如何将'const Obj'插入 std::list<T*>?
How to insert 'const Obj' into std::list<T*>?
我写了一个函数
void addAnything(T const &obj)
{
...
m_list.push_front(obj); // - line returns C2664 - list is initialized by std::list<T*> m_list
...
}
我的问题是从"T * const"中的"const T"转换。我需要将其插入到此列表中... =/任何将元素插入 std::list 的方法都需要"const T&x"。有没有办法将常量项插入我的列表中并保留 addAnything(( 的参数?也许通过适应m_list?
感谢任何建议!
您有一个const
对象,并且您正在尝试将其插入到指向非const
对象的非const
指针的容器中。 我假设你打算使用&obj
,但即便如此,这也不会奏效:如果obj
是临时的怎么办? 您需要将obj
设为T&
,或者复制obj
(可能带有new
(并推送该地址。
请注意,当你有一个T*
容器时,并不总是清楚谁拥有其中的T
。 除非您明确不希望容器获得所有权(在这种情况下,推送new
ed 的东西是一个坏主意(,否则您可能希望使用 boost::ptr_list<T>
.
试试这个:
m_list.push_front(new T(obj));
您的代码存在两个问题:首先,当列表需要指针时,您正在推送对象引用; 其次,您的列表需要一个非常量指针。您可以通过创建obj
的副本或将列表的类型更改为 std::list<const T*>
来解决第二个问题。
// 1.
m_list.push_front(new T(obj)); // don't forget to delete it later
// 2.
std::list<const T*> m_list;
m_list.push_front(&obj);
请注意,使用第二种方法时,只要在 m_list
中存储指向它的指针,就必须确保 obj
有效。
你知道std::list<T*>的定义吗?从列表中删除对象时,应手动删除对象。我不会用std::list
m_list.push_front(obj);
// - line returns C2664 - list is initialized by std::list<T*> m_list
错误消息抱怨您m_list
的类型为 std::list<T*>
。意思是,m_list
可以保存类型 T*
的元素。但是您正在推动obj
类型T&
.引用不是指针。
有没有办法将常量项插入我的列表中并保留 addAnything(( 的参数?也许通过适应m_list?
std::list<const T> m_list;
void addAnything( const T& obj ){
m_list.push_front(obj);
// ...
}
- 使用std::multimap迭代器创建std::list
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 如何在 C 中正确使用 libiconv 使其不会报告"Arg list too long"?
- C++中带有List类的迭代器Segfault
- 使用"std::unordereded_map"映射到"std::list"对象
- 呼叫运营商<<临时
- GCC对可能有效的代码抛出init list生存期警告
- 使用std::list创建循环链表
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 重载Singly Linked List中的赋值运算符
- <<操作员在下面的行中工作
- '[](std::list& list)<int>{return std::move(list)}(list)' 是否保证将 'list' 留空?
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- "std::list::splice(std::const_iterator pos, std::list&& other)"是否保证将"其他"留空?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- QStringList vs list<shared_ptr<QString>> 性能比较C++
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改