转换shared_ptr类型向量的迭代器

发布于 2024-11-17 17:36:28 字数 382 浏览 1 评论 0原文

如何转换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(); 
}

How can I cast an iterator of a vector of shared_ptr type? Consider following example:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风筝有风,海豚有海 2024-11-24 17:36:28

您不想强制转换,而是提取对该对象的引用:

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

You do not want to cast, but rather extract a reference to the object:

MyClass & obj = *(*it); // dereference iterator, dereference pointer
obj.doSomething();
江湖正好 2024-11-24 17:36:28

您只需再次取消引用即可获取引用。

MyClass& ref = **itr;

然后投射它或任何你想要的东西。

You can simply grab a reference by de-referencing it again.

MyClass& ref = **itr;

And then cast it or whatever however you'd like.

眼泪淡了忧伤 2024-11-24 17:36:28

您可以使用方法get()根据文档

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

这意味着您可以执行以下操作:

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

You can use the method get(), according to the docs:

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

It means you can do:

type_myClass* ptr =  *itr.get();    
ptr->doSomething();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文