如何将 std::bind 对象传递给函数
how to pass a std::bind object to a function
我需要将绑定函数传递给另一个函数,但我收到错误,没有可用的转换-
cannot convert argument 2 from 'std::_Bind<true,std::string,std::string (__cdecl *const )(std::string,std::string),std::string &,std::_Ph<2> &>' to 'std::function<std::string (std::string)> &'
该函数:
std::string keyFormatter(std::string sKeyFormat, std::string skey)
{
boost::replace_all(sKeyFormat, "$ID$", skey);
return sKeyFormat;
}
用法是这样的——
auto fun = std::bind(&keyFormatter, sKeyFormat, std::placeholders::_2);
client(sTopic, fun);
客户端函数如下所示-
void client(std::function<std::string(std::string)> keyConverter)
{
// do something.
}
你用错了placeholders
,你需要_1
:
auto fun = std::bind(&keyFormatter, sKeyFormat, std::placeholders::_1);
占位符的编号不是为了匹配参数的位置,而是为了选择要发送到原始函数的哪个位置的参数:
void f (int, int);
auto f1 = std::bind(&f, 1, std::placeholders::_1);
f1(2); // call f(1, 2);
auto f2 = std::bind(&f, std::placeholders::_2, std::placeholders::_1);
f2(3, 4); // call f(4, 3);
auto f3 = std::bind(&f, std::placeholders::_2, 4);
f3(2, 5); // call f(5, 4);
请参阅std::bind
,尤其是最后的示例。
客户端函数看起来不完整。您可能需要以下内容:
void client(const std::string &, std::function<std::string(std::string)> keyConverter);
此外,占位符应std::placeholders::_1
。
一个完整的示例是:
#include <iostream>
#include <functional>
#include <string>
std::string keyFormatter(std::string sKeyFormat, std::string skey) {
return sKeyFormat;
}
void client(std::string, std::function<std::string(std::string)> keyConverter) {
// do something.
}
int main() {
auto sKeyFormat = std::string("test");
auto sTopic = std::string("test");
auto fun = std::bind(&keyFormatter, sKeyFormat, std::placeholders::_1);
client(sTopic, fun);
}
相关文章:
- 如何使用单独文件中的派生类访问友元函数对象
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- 有没有办法将重载的类函数绑定到函数对象?
- 将指针传递到成员的指针,从模板参数包到函数对象
- 如何在类模板的成员函数中正确调用函数对象?正在生成 Visual Studio 编译器错误 C2440
- 隐式转换为比较函数对象(函子)用于 std::sort 而不是 std::map?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 如何通过接口将函子分配给函数对象
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 指向std::invoke中成员函数对象的指针
- 如何成功地将函数对象(或lambda)传递给trackbar回调的第二个参数(void*)
- "std::function"的简单版本:函数对象的生存期?
- C++ 将函数对象作为左值和/或右值传递
- SFINAE 用于具有默认参数的函数对象
- 构造函数对象赋值是否泄漏内存
- 如何发送通过绑定到函数/方法创建的函数对象?
- std::for_each 与函数对象
- 将函数对象传递给 std::function
- 访问执行策略for_each函数对象中的迭代器
- 通过C++函数对象类访问参数