当我知道插入的指针时,如何从 boost::ptr_set 中删除?

发布于 2024-12-23 04:41:02 字数 933 浏览 1 评论 0原文

当我知道插入的指针时,如何从 boost::ptr_set 中删除? (我有一个指向插入的类对象的 this 指针)。

这是一个人为的示例来展示我想要做的事情:

boost::ptr_set<ServerConnection1> m_srv_conns1;

ServerConnection1 *this_ptr;
m_srv_conns1.insert(this_ptr = new ServerConnection1);
m_srv_conns1.erase(this_ptr); //It won't work!

有一个指向插入对象的 this 指针,如何告诉 boost::ptr_set删除(这个)?注意:我不再位于插入的对象内,但我有一个指向它的指针。

更新

其中一条评论是我没有满足 boost::ptr_set 的所有要求。有什么要求?

我认为提供一个 <运算符 可以解决问题吗?

回答

  1. m_srv_conns1.erase(this_ptr); 更改为 m_srv_conns1.erase(*this_ptr);
  2. 将以下代码放入 ServerConnection1 类中:

布尔运算符<(const ServerConnection1 & sc1) const
<代码>{
return(this<&sc1); //指针比较
<代码>}

How do I delete from a boost::ptr_set when I know the pointer I inserted? (I have a this pointer to the inserted class object).

Here is a contrived example to show what I am trying to do:

boost::ptr_set<ServerConnection1> m_srv_conns1;

ServerConnection1 *this_ptr;
m_srv_conns1.insert(this_ptr = new ServerConnection1);
m_srv_conns1.erase(this_ptr); //It won't work!

Having a this pointer to the inserted object, how do I tell the boost::ptr_set to erase(this)? Note: I am no longer within the inserted object, but I have a pointer to it.

Update

One of the comments was that I was not fulfilling all the requirements of boost::ptr_set. What are the requirements?

I think providing a < operator would do the trick?

Answer

  1. Change m_srv_conns1.erase(this_ptr); to m_srv_conns1.erase(*this_ptr);
  2. Put the following code inside the ServerConnection1 class:

bool operator<(const ServerConnection1 & sc1) const
{
return (this < &sc1); //Pointer comparison
}

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

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

发布评论

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

评论(1

┾廆蒐ゝ 2024-12-30 04:41:02

尝试m_srv_conns1.erase(*this_ptr);

Try m_srv_conns1.erase(*this_ptr);.

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