问题标签 [boost-ptr-container]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7333 浏览

c++ - ptr_map 插入

0 投票
4 回答
2118 浏览

c++ - 有没有一种简单的方法可以让 Visual Studio 中的 `boost::ptr_vector` 对调试器更友好?

我正在考虑使用这个问题boost::ptr_container的回答。我对库的最大问题是我无法在调试器中查看集合的内容,因为 MSVC 调试器无法识别它,因此我看不到容器的内容。(所有数据都作为内部存储)void *

我听说 MSVC 有一个称为“调试器可视化器”的功能,它允许用户使调试器更智能地处理这些事情,但我从来没有写过这样的东西,而且我对这些事情也不是很熟悉。

例如,将 的行为boost::shared_ptr与 MSVC 自己的std::tr1::shared_ptr. shared_ptr在调试器中(即在 Watch 窗口中),boost 版本显示为用于实现共享指针的大量内部变量,但 MSVC 版本显示为指向对象的普通指针(并且隐)。

我怎样才能开始使用或实现这样的东西?

0 投票
1 回答
1457 浏览

glibc - 检测到 glibc:free():无效指针:使用简单的 boost::ptr_map 示例

我知道有很多问题与“ * glibc detected * free(): invalid pointer”有关,但以下是 boost::ptr_map 的极简示例:

代码编译,但在运行时:

在整个 SO 中重复出现这种错误是在尝试删除无效指针时引起的。但是,上面非常简单的代码中的哪些更改可以避免此错误?

这个问题的背景是我正在努力理解 boost::ptr_map 的正确用法。不幸的是,就 ptr_map 而言,官方的 boost 文档非常稀疏(没有教程,没有 ptr_map 的示例)。网络上似乎没有 boost::ptr_map 教程。我在检索值和访问我创建的映射类的方法时遇到问题。因此,我试图创建一个我能做到的最简单的例子,但正如上面所证明的那样,起步很糟糕。

对上述 glibc 错误和一般 ptr_map 的任何帮助表示赞赏。谢谢。

编辑:我已经阅读了 20 多次,研究并复制了官方 boost 教程中的示例http://www.boost.org/doc/libs/1_46_0/libs/ptr_container/doc/tutorial.html 如上所述,boost本教程几乎没有涵盖 ptr_map,因此链接到它不会有任何区别。基本上,我已经多次通读了整个 boost ptr 容器手册。

0 投票
1 回答
524 浏览

c++ - 在 boost::ptr_unordered_map 中存储指向 const 对象的指针

我似乎无法boost::ptr_unordered_map<uint32_t, const Foo>工作 - 底层实现看起来像是将东西转换为void*.

我是否只需要咬紧牙关,让我的方法const_cast<Foo*>在插入项目时包装对此的访问,还是我在这里遗漏了什么?有没有办法存储指向 const 对象(const Foo*)的指针?

0 投票
2 回答
599 浏览

c++ - C++ 友好 boost::ptr_map / boost::checked_delete 失败

我想在存储自身实例的特定类中使用 boost::ptr_map 。但是,请考虑以下示例:

错误发生在以下行

这里到底发生了什么?它不应该工作吗?我假设问题在于模板是在它们包含的编译单元中定义的,并且 boost::checked_delete 是从 bosst::ptr_map 的实现源中的另一个编译单元调用的。所以,这与我声明为朋友的函数不同。

但是,是否有解决此问题的方法?

0 投票
2 回答
774 浏览

c++ - 从任意映射中获取指向 mapped_type 的指针或引用

编辑:我已经找到并编写了我的问题的解决方案,但我没有回答这个问题,因为我的解决方案可能仍然不理想。

我正在编写一个小型库,旨在在地图上执行例程,但是我在设计一组类模板时遇到了麻烦,这些模板将让我获得指向地图的指针或引用(取决于地图的 value_type 的 second_type) mapped_type,不管映射的类型(例如std::map、boost::ptr_map)。

为了进一步阐述,我列出了一些输入类型和所需的输出类型。

我的代码通过了案例 A、B、D 和 E,但在案例 C 和 F 上失败了。这是我目前所拥有的。

我正在尝试使用 boost::mpl 来做到这一点,这就是我到目前为止所做的,但是使用两个版本的代码我都会遇到同样的错误。

错误。

修改后的结构特化来处理不是映射指针的左值。

0 投票
3 回答
1149 浏览

c++ - STL算法删除容器中的所有对象?

是否有delete *the_object_iterator;对所有对象执行 STL 实用程序/算法?这样我就可以clear()安全了?STL 容器是 a set,对象是指向用 . 创建的 C++ 类的指针new

Boost似乎是最好的解决方案。我的目标是避免对不可复制的类进行复制构造。

0 投票
1 回答
826 浏览

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

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

这是一个人为的例子来展示我正在尝试做的事情:

有一个this指向插入对象的指针,我如何告诉boost::ptr_setto erase(this)?注意:我不再在插入的对象中,但我有一个指向它的指针。

更新

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

我认为提供一个< operator会做的伎俩?

回答

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

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

0 投票
1 回答
879 浏览

c++ - Boost Pointer Container - 不能将类存储为 ptr_map 的键

我一直在尝试使用 Boost Pointer Container 库,并利用他们的教程示例来了解该库。也许我遗漏了一些东西,但我似乎无法存储一个我定义为 ptr_map 键的简单类。但是,相同的密钥适用于 ptr_set。

这会生成以下正确的输出:

但是,如果我将 MammalsContainer 切换为 ptr_map,它甚至不会编译:

导致以下编译错误:

我已经阅读了 Pointer Container boost 页面上的所有文档/示例,以及许多与 ptr_map 相关的 StackOverflow 问题;似乎每个人的用例都涉及使用简单的原始键,例如 std::string 或 int。如果我在上面的示例中有一个 string/int Key 并将 Mammal 类存储为值,它就可以工作。

我真正想要构建的是一个 Key 对象层次结构,并且能够提供专门的 operator< 以便排序可以工作。我的最终用例是我的 Keys 可以由不同的属性组成,即 Key1 只包含一个 name 属性;Key2 包含名称和位置。此外,映射的值也由对象层次结构表示。我最初开始使用

但导致 ptr_container 库作为一种更有效的解决方案来处理关联容器中的多态性。或者,也许我跳到了那个结论。

0 投票
1 回答
1164 浏览

c++ - std::set 和 boost::ptr_set 之间的区别?

我更改了一些代码以将 a 转换std::setboost::ptr_set. 但是,代码无法编译;问题是我假设插入的返回值与ptr_set插入set(a pair<myIter, bool>)相同。在谷歌上一个小时后我发现了这个,结果发现ptr_set插入的返回值似乎是一个布尔值。

是否有关于 ptr 容器和 std 容器之间差异的明确文档?我在boost网站上没有找到任何东西,但也许我只是愚蠢......

编辑

好的 - 让我感到困惑的是这段代码

在 gcc 的第一行报告没有错误,但operator=在第二行报告没有匹配,所以我认为错误在返回类型中。但是,如果您注释掉第二行,则第一行将报告为错误(发布不返回迭代器)。我发布的链接加剧了我的困惑,其中 ptr_container 的作者指出“ptr_set<> 中的插入()返回布尔值”。但是,继续阅读链接,很明显当时代码还没有完成。谢谢克雷克。