gpt4 book ai didi

c++ - 调用带有 std::ref 参数的 std::bind(ed) 函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:17:55 32 4
gpt4 key购买 nike

#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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com