[C++] 使用指针调用类成员方法

您所在的位置:网站首页 类函数指针定义与使用 [C++] 使用指针调用类成员方法

[C++] 使用指针调用类成员方法

2023-09-16 23:18| 来源: 网络整理| 查看: 265

关键词: 类成员方法 函数指针 类间函数调用  std::function

目录

结论

摘要

0 引子

1 使用静态成员方法

2 使用this-> 传递函数指针

3 函数包裹

3.1 C语言形式的包裹(指针包裹)

3.2 C++ 形式的包裹

3.3 std::funtion 包裹(优雅的实现)

4 拓展

4.1 std::funtion 详解

4.2 成员函数指针长度

5 应用

5.1 多线程创建

5.2 接收与处理分离

结论

任何指向“类”的成员函数指针,由于携带额外的所属对象信息,与一般的函数有根本的不同,不能直接用来进行函数调用。用C++ 描述:对于类class MyClass 中的成员函数 void Method(); ,它的函数类型为void (MyClass::*f)(); 而不是void (*f)(); 。

摘要

对于C语言来说,函数指针是可以任意传递的。这跟语言特性有关系,C语言是一种静态的,在程序运行前分配函数地址的。而C++是动态的,在对象申请时,才会有成员函数的地址。因此,对于C++使用者而言,一个类中方法是不能通过直接传递的方式获取另外一个类的成员函数指针的。你在传递成员函数的地址时,还要传递该对象的指针。

0 引子

在C语言中,你可以转换任意函数的指针,通过传递函数指针的方式将目标函数传递给目标调用。函数指针类型是全局的,任意传递的。它是一种不够安全的方法。比如:

#include  void Add(int a, int b) {     std::cout *f)(); } void MyClass::InvokeMethod() { std::cout InvokeMethod(); } class MyClass { public: MyClass(); ~MyClass(); void TestMethod(f myFunction); private: }; MyClass::MyClass(){} MyClass::~MyClass(){} void MyClass::TestMethod(f myFunction) { myFunction(); } class InvokeClass { public: InvokeClass(); ~InvokeClass(); void InvokeMethod(); private: }; InvokeClass::InvokeClass(){} InvokeClass::~InvokeClass(){} void InvokeClass::InvokeMethod() { std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3