问题标签 [boost-functional]

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 回答
340 浏览

c++ - 提升 lambda 集合大小评估

我有一个形式的功能:

这个函数做一些工作并且只在条件为真时返回。该条件已表示为函子参数,因为我想在不同的调用站点提供不同的条件。

现在,直接使用它相当简单,但它需要声明许多小的一次性函数或仿函数对象,如果可能的话,我想避免这些。我一直在研究 Boost 的 lambda 库,以寻找消除这些问题的可能方法,但我认为我缺少一些基本的东西;我只是不能让它做我想做的事。

目前让我感到难过的一个案例是:我有一个std::vector名为data;的集合。我所追求的条件是当该size()集合达到某个阈值时。那么,本质上,我希望我的condition仿函数在何时返回真data.size() >= threshold,否则返回假。但我一直无法用 lambda 语法表达它。

到目前为止,我能想到的最好的(至少可以编译,尽管它不起作用)是这样的:

在进入 时DoSomething,大小为 0——即使在运行过程中大小增加,对 的调用condition()似乎总是大小为 0。跟踪它(通过 Boost 的内部机制有点棘手),而它确实似乎在greater_equal每次condition()评估时都在调用,它似乎没有在调用size().

那么我完全搞砸了什么基本的事情?有没有一种更简单的方式来表达这种事情(同时仍然尽可能保持代码内联)?

理想情况下,我希望它尽可能接近 C# 等效代码流畅度:

0 投票
4 回答
1203 浏览

c++ - 是否有可能创建一个可以创建任何“注册”对象类型的实例的 C++ 工厂系统,而不管继承如何?

我花了一整天的时间研究这个话题,所以我带着这个话题来找你的只是一些零散的知识。请允许我描述一下我正在尝试完成的工作,也许您可​​以提出解决当前问题的方法,或者另一种完全解决问题的方法。

我试图模仿与XAML文件在WPF中的工作方式相关的内容,您实际上是在从 XML 定义中实例化对象树。如果这不正确,请告知。这个问题与WPFC#或任何托管的东西无关- 我只提到它是因为它是一个类似的概念。

因此,我已经创建了一个XML解析器类,并基于ObjectNode对象生成了一个节点树。ObjectNode对象拥有一个名为type的字符串值,并且它们有一个std::vectorObjectNode对象。

下一步是根据ObjectNode树中的数据实例化对象树。需要此中间ObjectNode树,因为同一ObjectNode树可能会被实例化多次或根据需要延迟。正在创建的对象树使得树中的节点是公共基类的后代,现在我们可以将其称为MyBase。叶节点可以是任何类型,不一定从MyBase派生。

为了使这更具挑战性,我不知道树中可能涉及哪些类型的对象,因此我需要允许向工厂注册新类型。

我知道boost的工厂。他们的文档在此页面上有一个有趣的小设计段落:

o 我们可能想要一个工厂,它接受一些转发给构造函数的参数,
o 我们可能想要使用智能指针,
o 我们可能想要几个成员函数来创建不同类型的对象,
o 我们可能不一定需要多态基对象的类,
o 正如我们将看到的,我们根本不需要工厂基类,
o 我们可能只想调用构造函数 - 没有 #new# 在堆栈上创建对象,
最后我们可能想要使用自定义的内存管理。

我可能没有正确理解这一切,但这似乎表明我正在尝试做的事情可以通过 boost 的工厂来完成。但是我找到的所有示例似乎都描述了所有对象都派生自基本类型的工厂。

对此的任何指导将不胜感激。

谢谢你的时间!

0 投票
1 回答
686 浏览

c++ - Boost.Functional 与 Boost.Bind 相比有什么好处?

我从未使用过Boost.Functional,只是简要阅读了它的文档。看起来这是对标准 < functional > 标头的改进。

Boost.Functional主页上的一个示例(使用部分)被选为对该库的介绍。使用Boost.Bind(或Boost.Lambda)可以更轻松地完成相同的操作。此外,Boost.Bind是 < functional > 标头中其他工具的绝佳替代品。

我很好奇,Boost.Functional或 STL < functional > 标头中是否有任何Boost.Bind无法完成的内容?或者Boost.Functional的任何其他好处?

0 投票
0 回答
215 浏览

boost - 哪些 boost 工具组合允许使用抽象工厂设计模式?

据我了解,boost::function、boost::factory 和 std::map 的组合允许创建对象工厂。http://www.boost.org/doc/libs/1_49_0/libs/functional/factory/doc/html/index.html Loki 有抽象工厂,但由于某种原因 boost 没有它。使用抽象工厂模式的提升方式是什么?

我能想到的一种方法是抽象一个用于手动创建产品的接口——通过创建具有相同创建策略的产品。

如果您的答案使用静态多态性,我会更高兴。

0 投票
0 回答
153 浏览

c++ - Boost Factory 编译错误

试图用 Boost Factory 实现抽象工厂,层次结构的类有 c-tor 参数,已经看过这个讨论:Passing arguments in constructor with boost factory

我的例子如下:

创建工厂并尝试创建实例

问题它根本无法编译,并且 boost::bind 中的错误cannot convert argument 1 from 'int' to 'int &'

我了解错误的性质, boost::bind 出于某些原因期望非常量引用,但我传递了无法引用的右值。当然,在将构造函数参数更改derived1为引用后,一切都会编译,但看起来很难看。这种模式的正确用法是什么?

更抽象的问题 - 将 Boost Factory 与 C++14 一起使用是否值得?实现似乎有点过时了,我期待一些基于可变参数的东西

C++ 编译器 Visual Studio 2015

提升 1.61

0 投票
1 回答
110 浏览

c++ - boost::hash 用于包含 boost 单元的元组

我想使用一个包含增强单元类型tbb::concurrent_hash_map的键。我现在使用的 HashCompare 结构如下所示:std::tuple<A...>A...

对于所有非升压单元类型,我试过这很好,但对于升压单元则不然。我知道可以boost::hash使用自定义类型扩展功能,但我似乎无法做到这一点。由于我有很多单位,我想使用以下形式的模板来做到这一点:

将此函数放在boost命名空间或定义单元的命名空间中不起作用。

如何将 boost 散列函数扩展到自定义类型或为HashCompare::hash仅采用 boost 单元的函数编写模板?

0 投票
2 回答
128 浏览

c++ - 散列无序容器而不需要为该类型实现比较运算符

我正在寻找散列无序容器,例如unordered_mapand unordered_set。对于有序类型,如向量,boost::hash_range(v.begin(). v.end())效果很好,但它也依赖于顺序,例如

这个工作的例子:https ://coliru.stacked-crooked.com/a/0544c1b146ebeaa0

boost.org

如果您正在计算数据的哈希值,其中数据的顺序在比较中并不重要(例如一组),您将必须确保数据始终以相同的顺序提供。

好的,这看起来很容易——只需以某种方式对数据进行排序,但我不想每次散列时都这样做。使用正常mapset可以工作,但我需要做一些重写。

此外,这将要求我使用的每种类型都具有>、或定义<,以及和。<=>===std::hash

如何对容器进行哈希处理以使顺序无关紧要?