【发布时间】:2021-10-29 14:43:20
【问题描述】:
我有一个指向带有自定义迭代器的类的智能指针。我需要遍历它,但找不到任何示例。
struct SomeContrainer
{
int a;
}
struct ListClass
{
std::vector<SomeContrainer>::iterator begin() { return m_devs.begin(); }
std::vector<SomeContrainer>::iterator end() { return m_devs.end(); }
void add( const SomeContrainer& dev ) { m_devs.push_back( dev ); }
private:
std::vector<SomeContrainer> m_devs;
};
typedef std::unique_ptr<ListClass> ListPtr_t;
void Foo_Add( const ListPtr_t& list )
{
SomeContrainer dev1, dev2;
dev1.a = 10;
dev2.a = 100;
list->add(dev1);
list->add(dev2);
}
void DoSomeWorkOtherList( const ListPtr_t& list )
{
for( auto const& dev : list ) // <-- how to iterate over list ???
{}
}
// -----------
ListPtr_t pMyList( new ListClass() );
Foo_Add( pMyList );
DoSomeWorkOtherList(pMyList );
如果我不使用智能指针并且只有一个对象 ListClass list 我正在使用 C++11 并且无法升级,那么它工作正常。
【问题讨论】:
-
由于没有所有权转让,你的方法应该直接取
ListClass:void Foo_Add(ListClass& list)。