首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何指定可以接受boost::bind函数的c++函数指针

如何指定可以接受boost::bind函数的c++函数指针
EN

Stack Overflow用户
提问于 2014-11-14 07:37:32
回答 1查看 122关注 0票数 0

我试图使用boost::bind存储任意回调函数的列表,以允许为回调指定的参数:

例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void callback1(int something) {...}
void callback2(int onething,theotherthing) {...}

回调系统将它们存储在一个容器中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef void (*lpvFunc)();
// ...
std::map <int,lpvFunc>regged_callbacks;

在某种程度上,注册功能:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
registerCallback(int slot,lpvFunc cb) { regged_callbacks[slot]=cb; }

当我尝试执行绑定以适应回调时,就会出现问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
registerCallback(1,boost::bind(callback2,42,31337));

我得到了编译器错误,比如:...note:参数2没有已知的从'boost::_bi::bind_t >‘到'lpvFunc {aka (*)()}’的转换

那么,我应该修复什么来使这个工作(因为boost::asio似乎能够在回调的指针中接受这样的东西)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-14 07:41:00

不能存储指向具有捕获的函式的原始函数指针。相反,您可以做的是存储类型擦除的函子,而不更改其他任何内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 typedef std::function<void()> lpvFunc;

(如果您不在Boost.Function上,也可以使用C++11)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26933538

复制
相关文章
c++ 11 bind_箭头函数可以用bind吗
可以将bind函数看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适应”原对象的参数列表。 调用bind的一般形式:auto newCallable = bind(callable,arg_list);`
全栈程序员站长
2022/11/17
7760
C++函数指针、指针函数、返回值为函数指针的函数浅谈
函数指针、指针函数是C中重要而容易混淆的概念,博主将通过两个实例来说明这两个截然不同的概念。 而返回值为函数指针的指针函数就更难理解了,放在文章的最后来介绍。
全栈程序员站长
2022/06/25
1.6K0
C++函数指针、指针函数、返回值为函数指针的函数浅谈
boost::bind 不能处理函数重载 (error: no matching function for call to 'bind')
最近任务多、工期紧,没有时间更新博客,就水一期吧。虽然是水,也不能太失水准,刚好最近工作中遇到一个 boost::bind 的问题,花费了半天时间来定位解决,就说说它吧。
海海
2022/08/31
1.2K0
C++の函数——内联函数&函数指针
我们先看一下内联函数。内联函数也是C++中的一个重要特性。所谓内联函数,其实本质上也是一种函数,在形式上的表现就是在普通函数前面加上关键字"inline",然后相对于普通函数来说,它也比较短小。C++中"inline"的作用其实是为了优化代码的运行,降低代码的执行时间,就像在C语言中的宏函数一样,作用也是为了降低代码的执行时间。
leoay
2020/01/14
2.6K0
c++ 函数指针
声明指针时,必须指定指针指向的数据类型,同样,声明指向函数的指针时,必须指定指针指向的函数类型,这意味着声明应当指定函数的返回类型以及函数的参数列表。
全栈程序员站长
2022/06/25
4870
C++学习笔记 -- 函数指针与指针函数
函数指针:指向函数的指针,首先它是指针变量(同指向一个整形变量、字符、数组一样),其次它指向一个函数(地址)。
meteoric
2018/11/16
7870
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
1940
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
先定义一个函数 , 在本章节中使用不同的方法 , 定义该函数 对应 的 函数指针 ;
韩曙亮
2023/10/15
2060
【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )
C++指向函数的指针
函数指针是指向函数而非指向对象的指针。与其他类型的指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。(类似C#中的代理)
卡尔曼和玻尔兹曼谁曼
2019/01/25
1.5K0
c++指针函数的使用——回调函数
1 /* 2 3 函数指针 4 5 函数也是有地址的 6 7 所谓函数指针,就是指向函数的指针,函数指针也是一个变量,可以指向不同的函数。同时通过函数指针可以调用其指向函数,从而使函数的调用更加灵活。 8 9 函数指针的用途 10 11 12 13 14 */ 15 16 #include<iostream> 17 using namespace std; 18 int add(int x, int y); 19 int add(int x, in
拾点阳光
2018/05/10
1.8K0
C++的函数对象优于函数指针地方
转载自:http://blog.csdn.net/huang_xw/article/details/7934156    
Daotin
2018/08/31
7400
C++函数指针简介
(1)定义函数指针的语法形式比较复杂,常借助于typedef类型定义符来简化函数指针的定义。
恋喵大鲤鱼
2018/08/03
3850
C++函数指针详解
每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。
全栈程序员站长
2022/06/25
3150
C++ bind函数适配器
    在我之前的博客让类成员函数指针成为可调用对象里有提到bind函数适配器,现在在这里介绍一下。
学徒漠筱歌
2022/07/17
3140
【C++】函数重载 ③ ( 为函数指针赋值重载函数 )
之前的博客 【C 语言】指针 与 数组 ( 指针 | 数组 | 指针运算 | 数组访问方式 | 字符串 | 指针数组 | 数组指针 | 多维数组 | 多维指针 | 数组参数 | 函数指针 | 复杂指针解读) 六. 函数指针 章节中 , 详细介绍了 函数指针 , 以及 函数指针 与 数组 , 其它指针 结合的 复杂指针如何进行解读 ;
韩曙亮
2023/10/15
3100
【C++】函数重载 ③ ( 为函数指针赋值重载函数 )
C++ Boost 函数与回调应用
#include <iostream> #include <string> #include <boost\bind.hpp> using namespace std; using namespace boost; int func(int x, int y) { return x + y; } struct struct_func { int func(int x, int y) { return x*y; } }; int main(int argc, char *argv[]) {
微软技术分享
2022/12/28
6120
C++ Boost 文件系统相关函数
基础处理 #include <iostream> #include <boost/foreach.hpp> #include <boost/filesystem.hpp> using namespace std; using namespace boost; using namespace boost::filesystem; int main(int argc, char *argv[]) { // 判断路径是否为空 filesystem::path path_a; if (path_a.emp
微软技术分享
2022/12/28
6280
C++:17---函数指针
一、格式 指针名前*号,并且将*和指针名用括号括起来 例如: //指针名为pf,指向一个返回值为bool,参数为两个const string&的函数bool (*pf)(const string&, const string&);//这个不是函数指针,而是一个返回值为bool*的pf函数bool *pf(const string&, const string&); 二、函数指针的赋值 可以直接将函数名赋值给函数指针,或者在函数名前加&符号都可以 bool lengthCompare(const strin
用户3479834
2021/02/03
9931
C++传递函数指针[通俗易懂]
函数指针是一个很好的类型。因此,您可以编写一个函数,它的一个参数是一个函数指针。然后。在(外部)当函数使用的函数指针参数,来间接调用时调用相应的参数的函数的函数。
全栈程序员站长
2022/07/06
6060
函数指针的定义方式,和指针函数的区别,函数指针数组
可以类比数组指针:int(*p)[10] 方式1: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void fun1(int a, int b) { printf("%d+%d", a, b); } void test() { //函数指针定义的三种方式 //1.先定义出函数类型,再通过函数类型定义指针变量 typedef void(FUNC_TYPE)(int, int); FUNC_TYPE* func = fun1; func(10,2
大忽悠爱学习
2021/03/02
1.3K0
函数指针的定义方式,和指针函数的区别,函数指针数组

相似问题

存储不同类型的函数指针c++ boost::bind

10

C++ Boost::bind:指向绑定函数的指针只能用于调用函数

11

boost::bind &boost::指向重载或模板化成员函数的函数指针

20

c++:boost::bind能否用于将成员函数转换为预期的函数指针签名?

30

clojure boost::bind vs c++ partial函数

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文