c++ - 使用 std::bind 并存储到 std:: 函数中
问题描述
我正在尝试使用 std::bind 绑定到函数并将其存储到我的 std::function 回调对象中。我写的代码是我实际代码的简化版本。下面的代码无法编译,说
_1 未在范围内声明
注意:我知道使用 lambda 也可以做到这一点。但是函数处理程序已经存在并且需要使用,否则我需要在 lambda 中调用处理程序。
#include <iostream>
#include <functional>
typedef std:: function<void(int)> Callback;
template <class T>
class Add
{
public:
Add(Callback c)
{
callback = c;
}
void add(T a, T b)
{
callback(a+b);
}
private:
Callback callback;
};
void handler(int res)
{
printf("result = %d\n", res);
}
int main(void)
{
// create a callback
// I know it can be done using lambda
// but I want to use bind to handler here
Callback c = std::bind(handler, _1);
/*Callback c = [](int res)
{
printf("res = %d\n", res);
};*/
// create template object with
// the callback object
Add<int> a(c);
a.add(10,20);
}
解决方案
占位符_1
, _2
, _3
... 放置在命名空间中std::placeholders
,您应该像这样限定它
Callback c = std::bind(handler, std::placeholders::_1);
或者
using namespace std::placeholders;
Callback c = std::bind(handler, _1);
推荐阅读
- python - 强制多处理池迭代参数
- css - Laravel 5.7 Bootstrap 4 按钮颜色很奇怪
- java - 爪哇。划分输入,以便将数字分成 3 个相等的部分,但技巧在于描述问题
- powershell - 等待所有子进程完成
- session - JMeter 登录一次,多次操作
- javascript - 为什么 React 只有当它们是变量时才将 undefined/boolean/null 解析为字符串?
- django - Django Rest Framework 在创建记录后设置一个字段 read_only
- c++ - 将私有数据成员添加到野牛生成的类
- c++ - std::string 的对象真的可以移动吗?
- android - 在 TileService#onStartListening() 中调用 Tile#updateTile() 时出现 IllegalArgumentException