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

c++ - 排序函数不适用于在堆栈上创建的函数对象?

为什么 obj2 在第二个排序函数中会导致编译器错误。

0 投票
4 回答
446 浏览

c++ - 在 C++ 中编写 structarray 映射函子的最清晰方法

这是一个关于最易读的方式做某事的民意调查——是使用指向成员的 C++ 指针、字节偏移量还是模板化仿函数来定义“从结构 foo 中选择成员 X”。

我有一个包含大量结构向量的类型,并且我正在编写一个实用函数,该函数基本上在其中一些范围内作为reduce操作。每个结构都将一组因变量与独立维度上的某个点相关联——为了发明一个简化的例子,想象这记录了一个房间随着时间的推移的一系列环境条件:

我的函数只是执行三次插值来猜测可用样本之间某个给定时间点的这些条件。

我想概括这个函数,以便它可以普遍应用于任何成员,而不仅仅是温度。我可以想到三种方法来做到这一点,虽然它们都可以直接编码,但我不确定一年后必须使用它的人最易读的方法是什么。这是我正在考虑的:


指向成员的语法

这感觉像是最“C++y”的方式,但它看起来很奇怪,而且整个指向成员的语法很少使用,因此我团队中的大多数人都很难理解。这是技术上“正确”的方式,但也是我会收到最困惑的电子邮件的方式。

结构偏移

这在功能上与上述相同,但显式地执行指针数学运算。这种方法对于我团队中的每个人(他们都在 C++ 之前学习 C)都会立即熟悉和理解,而且它很健壮,但看起来很恶心。

模板化函子

这是最直接和 STL 式的做事方式,但它看起来像是一大堆额外的类型和语法以及临时的类定义。它编译成与上面两个几乎完全相同的东西,但它还在整个可执行文件中转储了一堆冗余函数定义。(我已经用/FAcs验证了这一点,但也许链接器会再次将它们取出。)


以上三个都可以工作,编译器为它们发出几乎相同的代码;所以,我必须做出的最重要的选择就是最易读的。你怎么看?

0 投票
5 回答
2559 浏览

c++ - 使用仿函数子类化窗口 (Win32)

快速健全性检查:是否可以使用仿函数对窗口进行子类化?我遇到了一种情况,我想在 win proc 中提供一些数据,但 GWLP_USERDATA 已经被使用。仿函数似乎是一个不错的选择,但我无法让它工作。

这是基础知识:

看起来一切都很好,但是当我在消息泵中点击 DispatchMessage() 时,我“访问冲突写入位置 0x00000000”,显然不是一个好兆头。去掉上面代码的调用,生活又快乐了。:(那么这甚至可能吗,还是我完全走错了路?

0 投票
4 回答
9157 浏览

data-structures - 什么是表示无向图的好数据结构?

我需要构建一个无向图。我不需要它做任何太花哨的事情,但理想情况下它会像这样工作:

SML/NJ 中是否有一个好的数据结构来模拟这些关系?我应该自己滚吗?

更新

我已经开始尝试自己滚动,但是当我尝试测试它时出现类型不匹配错误。我在 SML 结构和函子方面的经验非常基础,所以我认为我做的事情显然是错误的。我怎样才能让它工作?另外,你能帮我把它做成一个'a graph吗?从语义上讲,这似乎更有意义。

代码

错误

当我做

我得到一个类型不匹配:

0 投票
7 回答
1154 浏览

c++ - 简化 FOR 循环

我有一个函数,它基本上从双精度向量中读取值,将它们附加到一个字符串(同时确保每个之间有一个空格并设置它们的精度)并返回最终结果,减去最后的空格:

我想知道是否可以以任何方式简化此代码。我最近一直在研究特别是 for_each 和仿函数的使用,但还没有弄清楚这些技术如何改进这个特定的例子。

0 投票
2 回答
672 浏览

c++ - c++ 运算符重载和使用

bool operator()(Iterator it1, Iterator it2) const { return (*it1 < *it2); }

谁能帮我解释一下这个功能,谢谢!这是否意味着重载运算符()?超载后,如何使用它?

0 投票
5 回答
3786 浏览

.net - ML 仿函数可以在 .NET (C#/F#) 中完全编码吗?

ML 仿函数可以用 .NET 接口和泛型实际表达吗?是否有一个高级 ML 仿函数使用示例来对抗这种编码?

答案摘要

在一般情况下,答案是否定的。ML 模块提供不直接映射到 .NET 概念的功能(例如通过签名 [ 1 ] 共享规范)。

但是,对于某些用例,可以翻译 ML 习语。这些案例不仅包括基本的Set函子 [ 2 ],还包括 monads [ 3 ] 的函子编码,以及 Haskell 的更高级用途,例如 finally 无标签解释器 [ 4 , 5 ]。

实际编码需要妥协,例如半安全向下转换。你的里程会很谨慎。

博客和代码:

  1. 博客.matthewdoig.com
  2. highlogics.blogspot.com
  3. F#中的monad函子
0 投票
2 回答
1446 浏览

c++ - 如何使用 binder 和 bind2nd 函子?

如何使用 binder2nd、bind2nd 和 bind1st?更具体地说,何时使用它们以及它们是否必要?另外,我正在寻找一些例子。

0 投票
2 回答
942 浏览

c++ - C++ 模板化函子

我想知道是否有人可以帮助我处理仿函数。我真的不明白函子是什么以及它们是如何工作的我试过用谷歌搜索它,但我仍然不明白。函子如何工作以及它们如何与模板一起工作

0 投票
1 回答
2106 浏览

c++ - 从成员函数指针类型生成函子

我试图简化(通过)为 arity n的成员函数make_fn()预处理参数(通过)的仿函数的生成。 生成函子基本上是可行的,但直到现在只能通过显式指定成员函数的参数类型。 现在我想从它处理的成员函数类型生成正确的函子:wrap()

但是,有了这个,vc++ 和 g++ 就不会F被视为make_fn(). 我必须在这里错过一些明显的东西,并且感觉有点盲目。

这个想法是它应该像这样工作:

关于如何使其工作的任何想法?

背景:
我有一个固定的界面,简化后看起来像这样:

X 是一种变体类型,我必须将其转换为某些后端类型(int、std::string、...)。
为了处理这些调用,我有一个按名称查找的仿函数映射,并将这些调用映射到某个实例的成员函数。
包装的目的是避免手动转换,而是生成为 me 或throw. 我有这个使用基于宏的解决方案,但该解决方案需要明确指定类型和参数计数。
通过函数重载解析,我希望从成员函数签名中隐式生成正确的转换函子。