- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
#include <functional>
#include <iostream>
struct Test
{
void fnc(int & a) { ++a; }
};
int main ()
{
typedef std::function<void(int)> Func;
int i = 0;
Test t;
Func f = std::bind(&Test::fnc, &t, std::ref(i));
//f(); //error C2064: term does not evaluate to a function taking 0 arguments
f(37); //Here I am forced to pass evidently unused int
std::cout << i;
}
我用对了吗?
真的有必要传递一些随机整数吗?
如果是这样,那是为什么?那是因为模板的魔力是有限的,我实际上必须将 int 传递给采用 int 的函数,或者它是出于某些目的而设计的吗? (例如,强制用户不要忘记函数的声明已经是什么样子了?)
我用的是vs2012
最佳答案
不不不:你拥有的是一个采用零 个参数的函数,因为一切都已经绑定(bind)了!您想要以下两个之一:
std::function<void()> f = std::bind(&Test::fnc, &t, std::ref(i));
std::function<void(int&)> g = std::bind(&Test::fnc, &t, std::placeholders::_1);
现在下面两个效果t.fnc(i)
:
f(); // OK, bound to `i` always.
g(i); // Same effect
请注意,如果可能,您应该将绑定(bind)函数声明为auto
,这样效率更高。第三个选项是闭包表达式,[&i,&t](){t.fnc(i);}
。
关于c++ - 调用带有 std::ref 参数的 std::bind(ed) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222495/
For 循环和多个变量和条件。 我正在使用 for 循环来设置源索引和目标索引以复制数组中的项目。 for(int src = 0, dst = 8; src = 0; src ++,
我正在尝试创建一个 2 面的 ggplot 对象,并将它们 grid.arrange 在两列中(grid.arrange 列)。在第二列中,在每个分面成员中,我想插入一个直方图。两列的数据源也不同。到
我正在使用 MS VS2010 和一个名为 Deleaker 的插件来发现我可能错过的任何内存泄漏。它告诉我 fopen_s 行有 2 处内存泄漏,但我没有在该行的任何内容上使用 new 或 mall
java.nio.charset.Charset.forName("utf8").decode解码 的字节序列 ED A0 80 ED B0 80 进入 Unicode 代码点: U+10000
我必须国际化 (i18n) 一个 Django 项目。它结合了许多内部 django 应用程序。它已经部分国际化了,即一些字符串是 _(),但有些是空的。一些模板使用 {% blocktrans %}
什么是EDS和 OD ?它们是如何创建和使用的? OD 是如何介于应用程序和 CAN 之间的?界面? 最佳答案 首先你应该读一点关于CANopen的内容熟悉这些概念。检查www.canopen.de您
我正在浏览 Wikipedia/Restrict , 并发现 The compiler can e.g. rearrange the code, first loading all memory lo
我正在 Linux 中编写一个 bourne shell 脚本,我正在使用 ed 将文本附加到文件的末尾。 我必须使用 ed 来完成这项任务。 我需要附加的文字看起来像这样 Modified on:
考虑以下 IL 代码: .method public static void Main() { ldstr "Starts Here" call voi
我有这样的东西: //html Action 1 Action 1 Action 1 ...
考虑使用 malloc 定义的 (char *) 变量 sTmp, 如果我将另一个变量分配给此 sTmp,通过该变量分配的内存是否会自动释放,或者该内存块是否会保持分配(且无用)直到进程结束? 让我用
我定义了一个不透明的结构和相关的 API,如下所示: typedef struct foo foo; foo *create_foo(...); delete_foo(foo *f); 我无法在我的
使用以下伪 Python 脚本将数据发送到本地套接字: s = socket.socket(AF_UNIX, SOCK_STREAM) s.connect("./sock.sock") s.send(
我有一个正方形比例的MKMapView mainMap,它的宽度等于iPhone屏幕宽度。我使用以下方法将其设为圆形: mainMap.layer.cornerRadius = mainMap.fra
假设您要对所有包含模式的文件进行编辑。例如,将所有“2017”更改为“2018”。存在许多针对 perl、sed 和各种其他的建议。如果 ed 编辑器可以工作的话,它会简单得多。 给定一个文件: $
我在 bash 脚本中使用 ed 来搜索文件; / 命令将显示我不想要的内容。我尝试重定向 >/dev/null 2>&1 但这对我不起作用。 文本文件foo.txt: a b c bash 脚本ba
我正在研究 ed 文本编辑器。 要退出输入模式,用户应输入一个句点 (.)。 假设我想以文本形式输入句点。 我想到了一个解决方法:首先,我插入类似.. 的内容。然后,我将 .. 替换为 .. 但我的方
Rust playground : trait FnBox { fn call_box(self: Box); } impl FnBox for F { fn call_box(sel
我们有多个域指向我们的 Tomcat Web 应用程序,它们都由我们的默认 Host 提供服务: 我需要配置哪个 Valve 模式来查看请求已发送到哪个域(即用户在网络浏览器中输入了哪
我做了一个简单的test(jsbin)与: {a:1} //dummy value var a=1; 然后: alert($("#a").text()); 结果是: 但是 - 使用
我是一名优秀的程序员,十分优秀!