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();