博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用纯C函数指针调用C++的类成员函数
阅读量:4660 次
发布时间:2019-06-09

本文共 1152 字,大约阅读时间需要 3 分钟。

之前偶然碰见一个需要使用C代码调用C++的成员函数的场景,于是记录下了这个需求,今天看了GECKO的NPAPI代码,找到一种方式
原理:
类的static成员是作为共享的方式被发布给外层的,所以不具有成员函数地址,因此它可以用来为我们转弯的调用类的成员函数提供一个机会。
在static成员函数中传递类本身的指针,就可以在内部调用这个指针的具体动作(做一下强制转换)。
由于static成员函数本身的作用域是属于类的public/protected的,所以它既能被外部调用,也能直接使用类内部的/public/protected/private成员。
这解决了不能通过C的函数指针直接调用C++的类普通public成员函数的问题。
以下是一个实例:
#include 
struct test{ char (*cptr_func)(void *);};class C{public: static char cpp_func(void *vptr){//针对这个对象调用他的成员函数 return static_cast
(vptr)->_xxx(); } char _xxx(){ std::cout<<"hei! _xxx called"<
由此我又想到使用友元函数,看下面的代码就明白了
#include 
struct test{ char (*cptr_func)(void *);};char cpp_friend_func(void*);class C{friend char cpp_friend_func(void *vptr);public: char _xxx(){ std::cout<<"hei! _xxx called"<
(vptr)->_xxx();}int main(){ struct test c_obj; class C cpp_obj; c_obj.cptr_func = cpp_friend_func; std::cout<< c_obj.cptr_func(&cpp_obj) <

 

转载自http://www.cppblog.com/TianShiDeBaiGu/archive/2011/09/09/baigu.html

转载于:https://www.cnblogs.com/wanzaiyimeng/p/6872939.html

你可能感兴趣的文章
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>
IntelliJ IDEA 的Project structure说明
查看>>
Java Security(JCE基本概念)
查看>>
创建 PSO
查看>>
JasperReport报表设计4
查看>>
项目活动定义 概述
查看>>
团队冲刺04
查看>>
我的Python分析成长之路8
查看>>
泛型在三层中的应用
查看>>
SharePoint2010 -- 管理配置文件同步
查看>>
.Net MVC3中取得当前区域的名字(Area name)
查看>>
获得屏幕像素以及像素密度
查看>>
int与string转换
查看>>
adb命令 判断锁屏
查看>>
推荐一个MacOS苹果电脑系统解压缩软件
查看>>