You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将std::bind绑定对象转换为std::function<void()>类型?

修正std::bind绑定参数的用法

你的代码问题出在bind(func, arg)()这一行——这里的()会立即执行绑定后的函数,返回void,根本没法赋值给std::function<void()>类型的变量。正确的做法是去掉这个多余的括号,直接把std::bind的结果赋值给目标对象。

正确代码示例

#include <queue>
#include <functional>

std::queue<std::function<void()>> tasks;

void add_job(std::function<void(void*)> func, void* arg) {
    // 直接将bind生成的无参可调用对象赋值给function<void()>
    std::function<void()> f = std::bind(func, arg);
    tasks.push(f);
}

补充:用Lambda表达式替代bind(更直观)

除了std::bind,你也可以用lambda表达式实现同样的效果,代码可读性更强:

void add_job(std::function<void(void*)> func, void* arg) {
    std::function<void()> f = [func, arg]() {
        func(arg);
    };
    tasks.push(f);
}

关键说明

  • std::bind(func, arg)会把arg绑定到func的第一个参数位置,生成一个不需要额外传参就能调用的可调用对象,完美匹配std::function<void()>的签名。
  • 如果你坚持用bind,注意不要在bind结果后加(),那会直接触发函数执行,而不是生成可调用对象存入队列。

内容的提问来源于stack exchange,提问作者Torch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:20:27