gpt4 book ai didi

c++ - 这里如何正确使用bind?

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:27 25 4
gpt4 key购买 nike

我想不出绑定(bind)成员函数的正确语法。如果我有一个函数接受一个带有单个参数的函数,如何将对象传递给它?

在下面的例子中,传递函数的正确语法是什么?

#include <iostream>
#include <functional>
void caller(std::function<void(int)> f)
{
f(42);
}
class foo
{
public:
void f(int x)
{
std::cout<<x<<std::endl;
}
};
int main()
{
foo obj;
caller(std::bind(&foo::f,obj));
//^Wrong
}

错误是:

a.cpp: In function ‘int main()’:
a.cpp:18:34: error: could not convert ‘std::bind(_Func&&, _BoundArgs&& ...) [with _Func = void (foo::*)(int); _BoundArgs = {foo&}; typename std::_Bind_helper<std::__or_<std::is_integral<typename std::decay<_Tp>::type>, std::is_enum<typename std::decay<_Tp>::type> >::value, _Func, _BoundArgs ...>::type = std::_Bind<std::_Mem_fn<void (foo::*)(int)>(foo)>]((* & obj))’ from ‘std::_Bind_helper<false, void (foo::*)(int), foo&>::type {aka std::_Bind<std::_Mem_fn<void (foo::*)(int)>(foo)>}’ to ‘std::function<void(int)>’
caller(std::bind(&foo::f,obj));

最佳答案

占位符为以后要绑定(bind)的实际参数创建一个“空间”:

int main()
{
foo obj;
caller(std::bind(&foo::f, &obj, std::placeholders::_1));
// ^ placeholder
// ^ address or even foo()
}

这些 placeholders需要为 std::bind 正确生成适当的签名结果绑定(bind)到 std::function<void(int)> .

您可能还想使用对象的地址,或 std::ref (所以它不会被复制);这将根据您希望的语义而有所不同。

关于c++ - 这里如何正确使用bind?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363352/

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