首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >通过std绑定向成员函数引用std函数

通过std绑定向成员函数引用std函数
EN

Stack Overflow用户
提问于 2020-07-17 13:43:41
回答 1查看 152关注 0票数 0

让我们想象一下,我定义了一个简单的函数引用包装器,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct wrapper {
    std::function<void(void)>& fct;
    
    wrapper(std::function<void(void)>& _fct) : fct{_fct}{
        fct();    
    };
};

当然,在现实中它比这个更复杂,但是我简化了它来说明这个问题。

然后,我想创建包含函数引用包装器的测试对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct test {
    wrapper myWrapper;
    
    test() : myWrapper{std::bind(&test::boom, this)}{};
    
    void boom() {
        std::cout << "boom()" << std::endl;
    }
    
};

test对象实例化时,我得到以下错误(尝试一下这里):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 cannot bind non-const lvalue reference of type 'std::function<void()>&' to an rvalue of type 'std::function<void()>'

这是可以理解的,因为std::bind对象是一个临时的(rvalue),我不能引用它(我也尝试过没有std::bind,没有更好的结果)。另一方面,能够以std::function的形式引用非静态成员函数似乎很容易,但我不能把它放在心上。

有什么简单的方法可以将非静态成员函数引用为std::function&**?** ()吗?

EN

回答 1

Stack Overflow用户

发布于 2020-07-17 14:37:07

有了这个“类型化绑定”的“原始”实现,我可以问:保存"test*“指针的内存将被包装器存储在哪里?那么bindex如何知道哪种类型的->first应该被转换到哪里呢?这个索引应该被删除吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
struct bindx : pair<void(test::*)(void), test*> {
    using pair<void(test::*)(void), test*>::pair;
    void operator()() { (second->*first)(); }
};

struct wrapper {
    bindx f_;
    
    wrapper(bindx f) : f_{f}{
        f_();    
    };
};

struct test {
    wrapper myWrapper;
    
    test() : myWrapper( bindx{&test::boom, this} ) {};
     . . .
}

http://coliru.stacked-crooked.com/a/a40f432aad928908

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

https://stackoverflow.com/questions/62962144

复制
相关文章
干了这碗“美丽汤”,网页解析倍儿爽
关于爬虫的案例和方法,我们已讲过许多。不过在以往的文章中,大多是关注在如何把网页上的内容抓取下来。今天我们来分享下,当你已经把内容爬下来之后,如何提取出其中你需要的具体信息。
Crossin先生
2019/10/24
9870
干了这碗“美丽汤”,网页解析倍儿爽
网页被抓取下来,通常就是str 字符串类型的对象,要从里面寻找信息,最直接的想法就是直接通过字符串的 find 方法和切片操作:
不二小段
2019/06/02
1.4K0
π 的美丽
终于到周末了!在家看了我最喜欢的电视节目《疑犯追踪》来解压。令人惊讶的是,这一集是关于最著名的数学常数pi(π),它等于圆周长与直径之比,通常约为3.14159。芬奇先生(主人公)担任代课老师,在黑板上写下了3.1415926535。然后他问学生:“这是什么意思?”我想了想在心里回答了这个问题:“如果我有一个直径为1的自行车轮胎,那么自行车轮胎完整转一圈可以行使的距离就是pi。”然而,在电影中,没有人回答。然后芬奇先生自己回答了这个问题,说道:
量化投资与机器学习微信公众号
2019/07/01
1K0
π 的美丽
美丽的架构
美丽的架构究竟是怎样的?架构师们上下求索,孜孜以求,始终不得其解。归根结底,美丽这个词语总还是偏于感性认识,就仿佛音乐之美,绘画之美,不能以尺度来衡量,追求的其实是一种艺术的幽玄与妙悟,述之以规范,述之以标准,就未免落入下乘了。 软件架构终归属于工程学的范畴,不能一概以“只可意会不可言传”来搪塞,因为架构知识是可以传递的,架构文档是可以共享的,最重要的是,架构自身是可以评审、验证与实现的。 Stephen J. Mellor在《架构之美》序中,画龙点睛地勾勒出美丽架构的模样,即必须遵循的一些普遍原则,分别
张逸
2018/03/07
7970
美丽的架构
数据是美丽的
Reddit 是美国的一个综合性论坛网站,网友戏称“美国贴吧”。我最近发现,这真是个宝藏网站。
Crossin先生
2019/05/31
8770
数据是美丽的
获取Class的信息
示🌰 public class Test08 { public static void main(String[] args) throws ClassNotFoundException, N
高大北
2022/06/14
1.5K0
美丽的数据——数据可视化与信息可视化浅谈
我们常常迷失在数据中,纷繁复杂的数据让我们无所适从。可视化作为解决这问题的有效手段,通过视觉的方式让数字易于理解。 数据可视化和信息可视化都是可视化的一种方式,数据可视化将数据库中每一个数据项作为单个图元元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析。信息可视化,旨在把数据资料以视觉化的方式表现出。信息可视化是一种将数据与设计结合起来的图片,有利于个人或组织简短有效地向受众传播信息的数据表现形式。 本文梳理了可视化相
前朝楚水
2018/04/03
1.6K0
美丽的数据——数据可视化与信息可视化浅谈
获取Qt的安装信息
  另外我们还可以在程序中使用QLibraryInfo类的location函数获取到Qt的安装信息。
Qt君
2020/05/08
6620
获取设备信息
mark下如何获取设备相关的信息 NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; // app名称 NSString *app_Name = [infoDictionary objectForKey:@"CFBundleDisplayName"]; // app版本 NSString *app_Version = [infoDictionary objectForKey:@"CFBundleShortVersi
周希
2019/10/15
1.8K0
获取注解信息
获取注解信息 新建一个注解 import java.lang.annotation.*; @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE,ElementType.METHOD,ElementType.FIELD}) public @interface MyAnnotation { String value() default "hejiaxuan"; } 新建一个class @MyAnnotation
何白白
2019/06/28
1.6K0
再谈信息获取
上次在文章《如何掌控自己的手机时间》里,我提到了自己获取信息的方式,引起了很多同学的共鸣,这又引发了我一些新的思考,今天写下来看看大家是否有同感。
sylan215
2020/03/02
9610
获取定位信息
获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用。开启高精度定位,接口耗时会增加,可指定 highAccuracyExpireTime 作为超时时间。地图相关使用的坐标格式应为 gcj02。
Remember_Ray
2020/10/29
2K0
获取定位信息
获取表头信息
代码中的使用直接通过list<Map<String,Object>> tableHead = jdbcBaseDao.getBackSimpleJdbcTemplate().queryForList(sql.toString());
用户3003813
2018/09/06
2K0
获取表头信息
风速信息获取
现场一个场站需要一个风速的信息,比较急,说是直接sql语句能够得到也行,后面的话,时间充裕可以通过web界面方便的获取。最近事情有些多,博客都堵在一块了,而且还没时间发布。
@坤的
2019/07/23
1.1K0
获取系统信息
人不读书,则尘俗生其间,照镜则面目可憎,对人则语言无味。一一北宋·黄庭坚 首先是依赖 <!-- 获取系统信息 --> <dependency> <groupId>com.github.oshi</groupId> <artifactId>oshi-core</artifactId> <version>3.9.1</version> </dependency> 然后是工具类 package com.ruben.utils.server; import oshi.SystemIn
阿超
2022/08/16
1.8K0
获取系统信息
获取对象信息
isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上
py3study
2020/01/15
1.8K0
桌游推荐
玩家轮流敲1或2下树干,敲下一个树皮得1分,敲下一个树心扣5分。敲完所有树皮,游戏结束。得分最高者胜。
前端GoGoGo
2018/08/27
6550
桌游推荐
python获取linux的系统信息
 python写的抓取linux系统主要信息的脚本,主要就是内存,硬盘、CPU之类的信息。
py3study
2020/01/10
1.8K0
获取Python函数信息的方法
Python的反射机制可以动态获取对象信息以及动态调用对象,本文介绍如何获取对象中的函数注释信息以及参数信息。
Python学习者
2023/04/14
5340
Python获取系统信息的代码
import os,inspect,socket,time,pymysql num = 0 class Mysql: def init(self,host,user,password,db): self.cnn = pymysql.connect(host=host,user=user, passwd=password, db=db, charset='utf8') self.cur= self.cnn.cursor() def run(self,sql):
大师级码师
2021/11/02
5360

相似问题

熊猫数据栏中的词汇提取

22

paths熊猫栏版本的提取

25

熊猫从栏中提取数字到新的栏中。

53

用正则表达式从熊猫数据栏中提取数据

23

用正则表达式从熊猫df栏中提取单词

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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