问题标签 [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 投票
1 回答
402 浏览

ocaml - 函子实现问题

下面描述的模块的目的是实现一个模块,该模块一旦由整数 n 启动,就会根据 n 的值执行所有操作。

错误:未绑定的模块类型 int

这里有什么问题?是否有更有效/更直观的替代实现?

0 投票
2 回答
1603 浏览

c++ - 在没有组合的嵌套 boost::bind 上执行参数替换

假设我有一个以空函子作为参数的函数:

我有另一个函数,它接受一个 int 并在内部做一些事情:

我想将这些嵌套但不组合在一起,以便我得到一个带有签名的函子:

当使用一个值调用时 - 比如 4 - 执行以下操作:

我的第一次尝试如下:

这失败了,因为 bind 在给定嵌套绑定时执行组合。首先调用 foo ,然后将值 void “返回”到 enqueue,但失败了。

我的第二次尝试如下:

这失败了,因为 enqueue 接受一个空函数,而不是一元函子。

我所寻求的可以完成吗?

其他信息:

  • 这与 6 年前未回答的 boost 论坛问题基本相同:http: //lists.boost.org/boost-users/2004/07/7125.php
  • 一些阅读表明,将 boost::lambda::bind 与 boost::lambda::unlambda 和 boost::lambda::protect 一起使用可能会满足我的要求。不幸的是 boost::lambda 的允许占位符 (3) 数量少得令人无法接受,而且编译时开销也很高。
0 投票
2 回答
177 浏览

c++ - 如何创建一个从输入流中读取下一个值的函子?

像这样的东西:

std::bind1st(std::mem_fun(&istream::get ??), cin). 这似乎对我不起作用。

编辑:

利用 :

0 投票
5 回答
1520 浏览

c++ - 为什么 STL 算法 for_each 两次调用我的仿函数的析构函数?

我正在试验 STL 算法,更具体的是使用 for_each 函数。我尝试了一个简单的用例来连接字符串向量。请注意,这可能不是一个好的和/或有效的代码。如果您真的想连接字符串向量,请查看 boost::algorithm::join 函数。

连接器类被实现为常规函子。

连接器.h:

连接器.cpp:

如果你编译并运行这个程序,你会得到以下输出:

concat hello to
concat world to hello
concat !!! to hello world
concatenator destructor called
concatenator destructor called
result =
concatenator destructor called

谁能解释为什么我不能从仿函数中提取正确的结果以及为什么多次调用析构函数。

0 投票
2 回答
861 浏览

haskell - 为什么默认情况下不使用 Control.Monad.Instances 实现 (->)

我在读LYAH。它说我需要显式加载Control.Monad.Instances才能使以下语法起作用:

这是为什么?为什么如果函子是这种底层和统一的技术,我必须显式加载Control.Monad.Instances才能获得该功能。没有它(->)如何实现(或者只是隐藏并且只->导出)?为什么fmap默认情况下不使用 over 函数类型?

0 投票
4 回答
6827 浏览

c++ - C++ 函子回调设置

我在 newty.de 上关注 Lars Haendel 的Functor 教程来设置回调系统。但是我有点困惑,我希望有人可以帮助我。

这是我的仿函数模板

我想要做的基本上是允许其他 .dll 使用我的 HookGameEvent() 函数,当调用游戏事件时,我可以运行我的钩子的向量||列表,检查事件名称是否匹配,然后执行根据需要回调。令我困惑的是如何将回调存储在看起来像这样的 HookEvent 结构中。

我现在已经把它注释掉了,但我确信它很明显我对什么感到困惑以及我在哪里搞砸了。如果有人可以提供任何帮助,将不胜感激。

0 投票
4 回答
13752 浏览

c++ - 在哪里定义 C++ 类成员模板函数和实例化它的仿函数?

我有一个 Foo 类,用于一个小型独立项目。它在 Foo.h 中有一个类定义,在实现文件 Foo.cpp 中实现了类的成员函数。

第一个问题 - 类 Foo 的成员函数之一是模板方法 Foo::doSomething(),这个方法的实现应该出现在 Foo.h 中的函数声明中是否正确?

Foo::doSomething() 将被实例化的模板参数是两种 Functor 类型之一 - 类 CalcA 和 CalcB。

我是不是该:

  • (A) 将两个 Functor 类的定义和实现放在一起放在 Foo.cpp 中(它们实际上被其他 Foo 成员函数的实现用来调用 Foo::doSomething)。
  • (B) 把这两个Functor类的定义和实现放在Foo.h中。
  • (C) 我是否应该像使用普通类一样在 Foo.h 和 Foo.cpp 中拆分两个 Functor 的定义和实现?
0 投票
1 回答
251 浏览

c++ - C++ - 从类模板调用方法

我目前在使用 C++ 中的类模板时遇到问题。我目前正在制作一个哈希表。

我使用仿函数作为类模板来为表的每个实例指定我的哈希函数。

IE:一张表的键是整数,值是字符串。另一个可能有字符串作为它的键和整数作为它的值,等等......

现在假设我想调用名为“myHash”的方法来散列一个键,我首先会通过以下方式调用它:

但是 gcc 没有找到例如 HashFuntor(string, unsigned int) 的函数重载。

有人可以告诉我如何调用 myHash 吗?(注意:我不想改变我的函子结构)

编辑:这是我从我的实际解决方案中得到的错误消息

编辑:到处都说 HacheString 实际上是 HashString (我已经翻译了我的代码以将其粘贴到此处)。

0 投票
5 回答
1387 浏览

c++ - 函子与模板参数

当使用带有静态成员函数而不是仿函数样式谓词的模板参数时,是否有任何性能优势?

例如,仿函数风格的排序接口通常是这样的:

你可以做更多这样的事情,并要求_Pred包含一个静态成员函数_Pred::less_than

理论上,第一种情况可能会在堆上动态创建一个临时函子对象,而我相信第二种情况在编译时已被完全评估。我知道(比如说)gcc 和/或 msvc 擅长优化,但是在第一种情况下可以做到同样的程度吗?

另外,我不是要重写 STL 排序例程或类似的东西,只是一个更一般的仿函数问题的例子......

0 投票
5 回答
801 浏览

c++ - 我可以编写一个同时接受原始指针和智能指针的 C++ 仿函数吗?

鉴于以下情况:

我有一个容器,Foo*我使用std::find_ifstd::not1找出容器中是否有任何元素bar()返回与给定值不同的东西。代码如下所示:

快进到未来,我现在有一个不同的容器,这次包含std::tr1::shared_ptr<Foo>. 我很想在重载版本的isAllEqual(). 但我不能。 Foo*并且shared_ptr<Foo>是不同的类型。我需要继承,unary_function所以我可以使用not1. 如果我可以避免两次编写相同的函子,那就更优雅了。

问题:

  • 有什么方法可以编写IsEqual它可以同时使用原始指针和智能指针?
  • 我是否使用 给自己戴上手铐std::not1?我应该改写IsNotEqual吗?

限制:

  1. 我不能使用 boost 库中的任何东西。
  2. 我们的编译器不够酷,无法支持 C++0x lambda。