Приведите итератор вектора типа shared_ptr - PullRequest
5 голосов
/ 26 июня 2011

Как я могу привести итератор вектора типа shared_ptr? Рассмотрим следующий пример:

typedef boost::shared_ptr < MyClass > type_myClass;

vector< type_myClass > vect;
vector< type_myClass >::iterator itr = vect.begin();

while(itr != vect.end())
{
   //Following statement works, but I wish to rather cast this 
   //to MyClass and then call a function?
   (*itr)->doSomething(); 
}

Ответы [ 3 ]

7 голосов
/ 26 июня 2011

Вы не хотите приводить , а скорее извлекать ссылку на объект:

MyClass & obj = *(*it); // dereference iterator, dereference pointer
obj.doSomething();
3 голосов
/ 26 июня 2011

Вы можете использовать метод get(), в соответствии с документами :

T * get() const; // never throws
Returns: the stored pointer.

Это означает, что вы можете сделать:

type_myClass* ptr =  *itr.get();    
ptr->doSomething();
3 голосов
/ 26 июня 2011

Вы можете просто получить ссылку, отменив ссылку на нее снова.

MyClass& ref = **itr;

А затем разыграть ее или что угодно, как вам захочется.

...