当前位置: 首页 > news >正文

什么时候用C而不用C++?

做接口只用C,千万别要C++。C++是编译器敏感的,一旦导出的接口里有 std::string这些东西,以及类,注定了要为各个编译器的各个版本准备独立的库。

刚好我有一些资料,是我根据网友给的问题精心整理了一份「C++的资料从专业入门到高级教程」,

点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!


一般来说,只要接口(如DLL导出的函数)是C的,那在同一个OS下的几乎所有语言都可以调用这个库。因此,很多现代的软件库,哪怕自己是用了一堆C++甚至boost开发的,都要额外的提供C语言的接口。

C++如何变成C的接口?最简单的就是句柄化。用void *替代对象的指针,而后用C语言封装所有的接口。要使用一个C++对象,就先create handle,内部调用new class,返回void *。而后,把class的所有方法都变成 class_callXXX(handle,...)的形式,把this指针通过handle传进去。当然这些函数可以设置为友元,会方便很多。当然用完后再销毁句柄。

至于COM、CORBA之类的抽象OO,都太复杂了。C的接口还是返璞归真。典型的比如 libuhd、 librdkafka等库,都是这样做的。af3676cd0eaa65b7dac4aa01c489f70b.jpeg

相关文章:

  • mysql当前状态分析(show status)
  • 吃星星(1.5)
  • 网页音频提取在线工具有哪些 网页音频提取在线工具下载
  • 转让无区域商业管理公司挺批行业包变更
  • Windows Server 2008 r2 + NAS
  • 介绍建造者模式
  • Hadoop的Windows环境准备
  • 超详解——识别None——小白篇
  • 『大模型笔记』什么是提示词注入(Prompt Injection)攻击?
  • Java 并发编程中的 synchronized 关键字及其现代优化技术
  • 写在高考之际
  • OpenAI模型规范概览
  • 技术架构的发展
  • flink 作业报日志类冲突的解决方案
  • java第二十一课 —— 快捷键,包,访问修饰符
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • Fabric架构演变之路
  • MySQL数据库运维之数据恢复
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • TypeScript迭代器
  • 测试如何在敏捷团队中工作?
  • 对JS继承的一点思考
  • 记一次用 NodeJs 实现模拟登录的思路
  • 前端技术周刊 2019-01-14:客户端存储
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 思考 CSS 架构
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 如何用纯 CSS 创作一个货车 loader
  • ​ssh免密码登录设置及问题总结
  • ‌[AI问答] Auto-sklearn‌ 与 scikit-learn 区别
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (转)linux 命令大全
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)(官方)UE4--图像编程----着色器开发
  • *上位机的定义
  • . NET自动找可写目录
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET处理HTTP请求
  • .NET中的Exception处理(C#)
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [AIGC] 如何建立和优化你的工作流?
  • [autojs]逍遥模拟器和vscode对接
  • [C/C++] -- 二叉树
  • [C++初阶]vector的初步理解
  • [C++从入门到精通] 14.虚函数、纯虚函数和虚析构(virtual)
  • [CSS]中子元素在父元素中居中
  • [Docker]五.Docker中Dockerfile详解
  • [Go 微服务] Kratos 验证码业务