首页 > 其他分享 >类成员函数作为回调使用示例

类成员函数作为回调使用示例

时间:2024-04-26 11:16:12浏览次数:24  
标签:std include 函数 示例 int callback 回调

在编写C++项目时,经常需要将类的某个成员函数作为回调函数使用,这里总结两个方法:

1.使用lambda函数,将类函数封装后使用,代码示例:

#include<funtional>
#include<memory>
class A {
public:
    A(std::function<int(int)> callback):m_callback(callback)
    {
    }
    int Run(int a)
    {
        return m_callback(a);     
    }
private:
    std::functin<int(int)> m_callback;
};

class B {
public:
    B()
    {
         m_a = std::make_shared<A>([&](int a){this->callback(a);});
    }
    int callback(int a){
         std::cout << a << std::endl;
    }
private:
    std::shared_ptr<A> m_a;
};

2.使用std::bind,将类函数封装后使用,代码示例:

#include<funtional>
#include<memory>
class A {
public:
    A(std::function<int(int)> callback):m_callback(callback)
    {
    }
    int Run(int a)
    {
        return m_callback(a);     
    }
private:
    std::functin<int(int)> m_callback;
};

class B {
public:
    B()
    {
         m_a = std::make_shared<A>(std::bind(&B::callback, this, std::placeholders::_1));
    }
    int callback(int a){
         std::cout << a << std::endl;
    }
private:
    std::shared_ptr<A> m_a;
};

 

标签:std,include,函数,示例,int,callback,回调
From: https://www.cnblogs.com/sheldon1990/p/18159548

相关文章

  • 【Qt 专栏】QString::arg()函数
    原文链接:https://blog.csdn.net/Gnar_w/article/details/134966919作者:Gnar_w  (CSDN) 一、说明在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(仅有些许类似)。二、使用有以下方式:使用arg(str1,str2,str3)这种方法进行替换。使用arg(str1).arg(str2).arg(......
  • 常用的时间序列分析方法总结和代码示例
    时间序列是最流行的数据类型之一。视频,图像,像素,信号,任何有时间成分的东西都可以转化为时间序列。在本文中将在分析时间序列时使用的常见的处理方法。这些方法可以帮助你获得有关数据本身的见解,为建模做好准备并且可以得出一些初步结论。我们将分析一个气象时间序列。利用逐时ERA......
  • C#中常用作event的delegate 函数
    1publicdelegatevoidEventHandler<TEventArgs>(objectsender,TEventArgse);使用例子:publiceventEventHandler<TcpClientKickedEventArgs>ClientKicked;//怎样调用if(ClientKicked!=null){ClientKicked(this,newTcpClientKickedE......
  • 【Qt 专栏】Qt:SQLite数据库操作示例
    转载自:https://blog.csdn.net/qq_40344790/article/details/129521573作者:DevFrank(CSDNC/C++ 优质创作者)1. sqlite介绍SQLite 是一种轻量级的嵌入式关系型数据库管理系统,它是一个开源的、零配置的、自包含的、事务性的SQL数据库引擎。SQLite的设计目标是简单、高效、可......
  • dotnet C# 使用 Win32 函数获取用户下载文件夹的路径的方法
    大家都知道,在dotnet里面的可以使用Environment.GetFolderPath方法配合Environment.SpecialFolder枚举列出当前运行环境下的一些特殊文件夹。然而SpecialFolder枚举不包含对Download下载文件夹的枚举值,如咱需要获取用户当前的下载文件夹,需要使用Win32方法来辅助获取在......
  • 双向循环链表的插入处理函数接口
    //方便访问,创建一个带头结点的双向循环链表//链表数据域取别名方便修改typedefintDataType_t;//构造双向循环链表的结点typedefstructDoubleCircularLList{DataType_tdata;//数据域structDoublLingkedList*prev;//直接前驱指针域......
  • vue中函数使用、class和style属性、条件渲染、列表渲染、数据的双向绑定、input事件、
    【事件指令中的函数使用】1<!DOCTYPEhtml>2<htmllang="en">3<head>4<metacharset="UTF-8">5<title>Title</title>6<scriptsrc="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"&......
  • 生成函数
    生成函数我们可以把生成函数看作是代数对象,其形式上的处理使得人们可以通过代数手段计算一个计数问题。通常我们默认级数是收敛的。(主要原因在于代数手段往往是需要保证收敛的)本文章不涉及多项式题目(交给考拉)普通生成函数的定义为:\[\displaystyle\sum_{n}a_nx^n\]常见的......
  • 16.匿名函数 与 部分内置函数
    【一】匿名函数1)语法lambda函数参数:表达式2)用法#单参数匿名函数lbd_sqr=lambdax:x**2#多参数匿名函数sumary_lba=lambdaarg1,arg2:arg1+arg2#多参数解包add_lba=lambda*args:sum(args)3)高阶函数#过滤函数(filter)odd=lambdax:x%2==1......
  • Web Component addEventListener .bind(this)的函数带参数引起的报错
     一开始这样写:  this.shadowRoot.querySelector('.prev').addEventListener('click',this.moveSlide(1).bind(this));报错:UncaughtTypeError:Cannotreadpropertiesofundefined(reading'bind')    以为是前面的DOM获取不对,但是怎么改都不对,网上查询后......