如何构建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();
}
答案 0 :(得分:7)
您不想强制转换,而是提取对该对象的引用:
MyClass & obj = *(*it); // dereference iterator, dereference pointer
obj.doSomething();
答案 1 :(得分:3)
您可以通过再次取消引用来获取引用。
MyClass& ref = **itr;
然后施放它或任何你想要的东西。
答案 2 :(得分:3)
您可以使用方法get()
,according to the docs:
T * get() const; // never throws
Returns: the stored pointer.
这意味着你可以这样做:
type_myClass* ptr = *itr.get();
ptr->doSomething();