问题标签 [functor]

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 投票
4 回答
27841 浏览

f# - F# 更改为 OCaml

F# 是从 OCaml 派生的,但缺少或增加了哪些主要项目?具体来说,我很好奇可用于学习 OCaml 的资源是否对想要学习 F# 的人也有用。

0 投票
7 回答
6406 浏览

java - Functor 和 Command 模式有什么区别?

我对命令模式非常熟悉,但我还不了解 Functor 和命令之间的理论区别。特别是,我正在考虑 Java 实现。两者基本上都是编程表示为对象的“动词”。然而,就仿函数而言,正如我从一些示例中看到的,匿名内部类实现似乎很常见。那里的任何人都可以很好地为我解决这个问题吗?

0 投票
5 回答
20432 浏览

c++ - 将 boost::function 降级为普通函数指针

想要将 boost::bind 传递给一个需要普通函数指针(相同签名)的方法。

我可以避免存储 boost::function 并直接传递绑定函子,但随后我得到类似的错误:

0 投票
11 回答
71633 浏览

c++ - 为什么要覆盖 operator()?

Boost Signals库中,它们重载了 () 运算符。

这是 C++ 中的约定吗?对于回调等?

我在一位同事的代码中看到了这一点(他恰好是 Boost 的忠实粉丝)。在所有 Boost 的优点中,这只会让我感到困惑。

关于这种超载的原因有什么见解吗?

0 投票
14 回答
533799 浏览

c++ - 什么是 C++ 函子及其用途?

我一直听到很多关于 C++ 中的函子的信息。有人可以概述一下它们是什么以及它们在什么情况下有用吗?

0 投票
3 回答
2193 浏览

c++ - 将函子保留为变量

我正在研究资源管理类,并希望用户为“ReleaseResource”方法提供一个函子,作为资源管理器构造函数的一部分。从那里请求资源时,将提供函子作为我将返回的 shared_ptr 的删除器,以便在不再使用资源时调用适当的方法。

我遇到的问题是,这需要我将仿函数存储在我的班级中,我不完全确定如何做到这一点。通常在使用仿函数时,您可以像这样对函数进行模板化:

如果您打算在该函数的范围内使用仿函数,这很好,但是由于模板超出了函数的范围,我不确定您将如何指定适当类型的变量来存储仿函数以供以后使用.

谁能在这里指出我正确的方向?

0 投票
3 回答
2763 浏览

c++ - 如何“调整”函子以与地图/多地图一起使用?

我在将 std::for_each 和其他算法与多映射一起使用时遇到困难,并且想知道是否有人可以帮助我开发一个可以将适当参数传递给“通用”函数的函子。

我对 map/multimap 的具体问题是它们的迭代器评估为 std::pair 而不是我需要使用的包含值(我的意思是 mapped_type)。所以,我的问题是,有没有办法将正确的值传递给设计用于使用其中一种包含类型的地图/多地图的函数?

这是我的示例代码:

我认为也许 bind1st 或 bind2nd 与 mem_fun 结合可以解决这个问题,或者我能想到的另一种方法是创建一个新的仿函数来存储原始仿函数并传递对的正确成员,但我不是设法得到任何好的结果。有STL经验的人可以给点建议吗?

好的,在不使用 boost 或额外的临时容器的情况下,我能得到的最好的结果如下:

0 投票
3 回答
7196 浏览

c++ - 我需要在 C++ 中创建一个简单的回调吗?我应该使用 boost::function 吗?

假设我有一些这样的代码:

我需要创建一个简单的回调,只要调用 Visitor::visit() 就会调用该回调。我知道我可能应该将回调的代码放在我的访问者中,但它在不同的上下文中,所以我想将 callBackFunction() 传递给访问者,以便他可以调用我的回调函数。

我在网上找了东西,看到了 boost::function,但是 c++ 已经有了基本的仿函数。

为了使代码更清晰,我应该使用哪一个?回调将是一个简单的 void() 函数,但它可能会增长,你永远不知道未来 :)

推荐的方法是什么?

0 投票
5 回答
1475 浏览

c++ - Functor 类在构造函数中工作

我正在使用 C++ 模板来传递策略函子来改变我的函数的行为。它工作正常。我传递的仿函数是一个没有存储的无状态类,它只是以经典仿函数的方式重载了 () 运算符。

我经常这样做,而且效果很好,而且我经常使用传入的 6 或 7 个模板化仿函数来制作模板!

但是我担心代码的优雅和效率。函子是无状态的,所以我假设 Operation() 构造函数是免费的,并且对函子的评估与内联函数一样有效,但像所有 C++ 程序员一样,我总是有一些挥之不去的疑问。

我的第二个问题是我是否可以使用另一种仿函数方法.. 一种不会覆盖 () 运算符的方法,而是将构造函数中的所有内容作为副作用!就像是:

我从未见过有人使用构造函数作为仿函数的“工作”,但它似乎应该工作。有什么优势吗?有什么缺点吗?我确实喜欢删除奇怪的双括号 "Operator()(a)" ,但这可能只是美观。

0 投票
1 回答
2512 浏览

functional-programming - Ocaml 中的函子

我对仿函数(它是结果类型)有点问题。下面,我有一个使用 Ordered 类型的 Set 仿函数。我实际上使用了set.mlocaml 附带的一些指导,但我似乎做的一切都是对的。我创建了一个带整数的 Ordered 模块,并将其应用于 Set 函子,以获取此代码示例中的最后一个模块 IntSet。

当我尝试插入一个整数时,下一行失败了。我收到以下类型错误:

不要误会我的意思,这里的类型系统是正确的。顶层报告的类型SetInt.eltSet(OrdInt).elt,但是当我使用 ocaml 提供的设置执行相同的操作来设置 Set 时,“相同”行是 , SetInt.elt = OrderedInt.t。好像我应该得到SetInt.elt = Ordered.t.

这很简单,我可能只是错过了一些愚蠢的细节!啊!

请注意:我在这里简化了成员/插入函数,因为这个问题与类型有关。