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

typedef含unsigned char*参数的std::function时绑定报错,如何解决?

问题解决方法

核心原因

你的代码存在函数签名不匹配的问题:

  • 定义的func_t是std::function<int(unsigned char &)>,参数为unsigned char的引用
  • 但B::somefunction的参数是unsigned char *(指针),std::bind生成的函数对象签名与func_t完全不兼容,因此无法转换。

两种解决思路

思路1:修正func_t的签名(推荐,若实际需求是接收指针)

如果业务逻辑中函数确实需要接收unsigned char*类型参数,直接修改func_t定义,使其与B::somefunction的签名一致:

// 将引用改为指针
typedef std::function<int(unsigned char *)> func_t;

修改后,原std::bind代码可正常运行,绑定后的函数对象能直接存入func_list。

思路2:用Lambda做签名适配(若必须保留func_t的引用参数)

如果func_t的签名不能修改(必须接收unsigned char&),可以用Lambda表达式封装B::somefunction,完成引用到指针的转换:

A::init()
{
    func_t f = [this](unsigned char &data) {
        // 将引用转为指针传给somefunction
        return b.somefunction(&data);
    };
    func_list.push_back(f);
}

Lambda的签名与func_t完全匹配,可直接存入vector。

补充说明

错误信息里提到的void(__thiscall B::*)(unsigned char *)是编译器报错时的类型显示细节,核心矛盾仍是引用与指针的签名不匹配,而非返回值类型错误(你的代码中B::somefunction声明为int返回是正确的)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:11:30