C++ 强制转换共享\u ptr类型的向量的迭代器

C++ 强制转换共享\u ptr类型的向量的迭代器,c++,boost,iterator,shared-ptr,C++,Boost,Iterator,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

如何强制转换共享类型的向量的迭代器?考虑下面的例子:

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(); 
}
typedef boost::shared_ptrtype_MyClass;
向量vect;
vector::迭代器itr=vect.begin();
while(itr!=vect.end())
{
//下面的陈述是有效的,但我更愿意表达这个观点
//然后调用一个函数?
(*itr)->doSomething();
}
您不希望强制转换,而是提取对对象的引用:

MyClass & obj = *(*it); // dereference iterator, dereference pointer
obj.doSomething();

您可以通过再次取消引用来获取引用

MyClass& ref = **itr;

然后按您喜欢的方式进行转换。

您可以使用方法
get()
,:

这意味着你可以:

type_myClass* ptr =  *itr.get();    
ptr->doSomething();

可能是重复的谢谢。如果我想使用shared_ptr访问它,那么下面的语句正确吗?虽然它没有给出任何编译器错误,但我不确定这是否好。type_myClass aClass=((type_myClass)(*itr))@Vijayendra:尽可能避免使用强制类型转换,C风格的强制类型转换更是如此。表达式中的强制转换是不必要的,您不妨说:
type\u myClass x=*itr。添加不必要的强制转换意味着,如果以后容器中的类型或接收类型发生更改,编译器将无法警告您该更改,并且您可能会在代码中创建错误。对,这是非常公平的。再次感谢David的评论。谢谢你的建议和链接。
type_myClass* ptr =  *itr.get();    
ptr->doSomething();