C++中如何将类的非静态成员函数绑定到函数指针上

ops/2024/9/24 10:34:24/

简介

在c++11中,可以通过std::bind将非静态成员函数绑定到function对象上,但是如何绑定到c中的函数指针上,可以借助function

实现

简单实现

typedef int (*ProcessCallbackT)(int, int);
void register_with_library(ProcessCallbackT func)
{int x = 0;int y = 1;printf("Value: %i\n", func(x, y));
}using ProcessCallback = std::function<int(int, int)>;
class FuncHelperClass
{static inline ProcessCallback function_obj;
public:static int FuncHelper(int a, int b){return function_obj(a, b);}static void FuncBind(ProcessCallback callback){function_obj = callback;}
};

模板

template <typename T>
struct Callback;//特例化
template <typename Ret, typename... Params>
struct Callback<Ret(Params...)>
{template <typename... Args>static Ret callback(Args... args)  //对应静态成员函数{return func(args...);}static inline std::function<Ret(Params...)> func; //对应静态函数对象
};

参考:
https://www.cnblogs.com/dragonxyl/p/15620367.html


http://www.ppmy.cn/ops/99042.html

相关文章

【数据结构】链表

目录 1.链表的概念及结构 2.单链表的实现 2.1 SLTPrint&#xff08;&#xff09;打印链表 2.2 SLTBuyNode() 申请空间 2.3 SLTPushBack&#xff08;&#xff09; 尾插 2.4 SLTPushFront() 头插 2.5 SSLTPopBack&#xff08;&#xff09; 尾删 2.6 SLTInesert&#xff08;…

进阶SpringBoot之 Druid 数据源

Druid 是开源平台上一个数据库连接池实现&#xff0c;具备日志监控功能 Druid 可以很好的监控 DB 连接池和 SQL 的执行情况&#xff0c;天生就是针对监控而生的 DB 连接池 Maven 仓库 pom.xml 文件导入 Durid 的 jar 包 <!-- Druid依赖 --><dependency><grou…

【超实用!】一文搞懂Transformer原理!‍✨

Hey小伙伴们&#xff01;&#x1f44b; 今天要和大家分享一个超酷的技术点&#xff1a;Transformer模型的原理&#xff01;如果你对深度学习和自然语言处理感兴趣&#xff0c;那么这篇文章绝对不容错过&#xff01;&#x1f469;‍&#x1f4bb;✨ &#x1f4da; Transformer是…

flutter 中 ssl 双向证书校验

SSL 证书&#xff1a; 在处理 https 请求的时候&#xff0c;通常可以使用 中间人攻击的方式 获取 https 请求以及响应参数。应为通常我们是 SSL 单向认证&#xff0c;服务器并没有验证我们的客户端的证书。为了防止这种中间人攻击的情况。我么可以通过 ssl 双向认证的方式。即…

设计模式-结构性模式-桥接模式

1.桥接模式定义 桥接模式就是将抽象部分与他的实现部分分离&#xff0c;使他们都可以独立的变化&#xff1b; 桥接模式用一种巧妙地方式处理多层继承存在的问题&#xff0c;用抽象关联来取代传统的多层继承&#xff0c;将类之间的静态继承关系转变为动态的组合关系&#xff0c;…

RocketMQ 如何保证消息不丢失?

RocketMQ 的消息想要确保不丢失&#xff0c;需要生产者、消费者以及 Broker 的共同努力&#xff0c;缺一不可。 生产者&#xff08;Producer&#xff09; 1、发送方式&#xff1a;选择同步发送 同步发送&#xff1a;发送消息后&#xff0c;需要阻塞等待 Broker 确认收到消息…

Docker-制作镜像

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、操作系统的组成&#xff08;一&#xff09;bootfs&#xff08;二&#xff09;rootfs&#xff08;三&#xff09;Liunx操作系统的启动过程&#xff08;1&…

Zustand:让React状态管理更简单、更高效

Zustand 这个单词在德语里是状态的意思&#xff08;发音&#xff1a;促stand&#xff09; 1. 下载zustand npm i zustand 或者 yarn add zustand2.创建一个store import { create } from zustandconst useBearStore create((set) > ({bears: 0,increasePopulation: …