如何优雅的导出C++类?

冰与火 2014-03-19 11:17:59
Hi:
今天论坛看帖子,一哥儿们的提问给我带来灵感:如何才能优雅的导出一个C++类?
我之前的导出很简单,就是在类定义时申明接口导出整个类,后来在linux上导出so,又变的特别麻烦。
接着使用工厂函数导出新建实例,可这有必须使用虚函数

那么请大家聊聊在工程中,不同平台喜欢的用法。
谢谢。
...全文
1000 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
康斯坦汀 2014-03-24
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
优雅的做法是不导出类。只导出C函数
赞同,导出C++类不是个好的方式,道理很简单,不同平台不同编译器实现的导入导出格式是不同的, 所以,导出C函数是更好的方式,可以把类操作变成接口操作,在C函数中New和Delete对象, 然后通过传递指针在不同模块间操作,这样可以很容易的跨平台跨编译器。 导出类能做的事,导出C函数都可以做到。
ningto.com 2014-03-23
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
优雅的做法是不导出类。只导出C函数
赞同, 那需要显示调用啊 #ifdef DLL_API #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif extern "C" { ExportClass* DLL_API create(); void DLL_API destroy(ExportClass *); } class DLL_API ExportClass { // ... }; 使用的时候: LoadLibrary GetProcAddress 得到导出的两个函数
碼上道 2014-03-23
  • 打赏
  • 举报
回复
直接导出C函数最方便,适应性强。
落单的毛毛虫 2014-03-22
  • 打赏
  • 举报
回复
果然 pimpl..
冰与火 2014-03-19
  • 打赏
  • 举报
回复
引用 2 楼 adlay 的回复:
COM
linux不好搞啊。。。 。。。
www_adintr_com 2014-03-19
  • 打赏
  • 举报
回复
COM
  • 打赏
  • 举报
回复
优雅的做法是不导出类。只导出C函数
fdsdfdsf 2014-03-19
  • 打赏
  • 举报
回复
引用 11 楼 Liu_peiqi 的回复:
[quote=引用 9 楼 fdsdfdsf 的回复:] 直接导出不优雅吗? 或者使用pimpl技法
引用 10 楼 derekrose 的回复:
dllimport
对于动态加载,有什么比较好的建议呢?[/quote] pimpl就是动态加载,建议看看陈硕的《多线程》一书
冰与火 2014-03-19
  • 打赏
  • 举报
回复
冰与火 2014-03-19
  • 打赏
  • 举报
回复
引用 9 楼 fdsdfdsf 的回复:
直接导出不优雅吗? 或者使用pimpl技法
引用 10 楼 derekrose 的回复:
dllimport
对于动态加载,有什么比较好的建议呢?
derekrose 2014-03-19
  • 打赏
  • 举报
回复
dllimport
fdsdfdsf 2014-03-19
  • 打赏
  • 举报
回复
直接导出不优雅吗? 或者使用pimpl技法
冰与火 2014-03-19
  • 打赏
  • 举报
回复
引用 7 楼 zhuyf87 的回复:
“我之前的导出很简单,就是在类定义时声明接口导出整个类” 这样做有什么不好吗?
在windows上必须要lib文件,也不能用LoadLibrary之类的函数。还有我改了类的数据成员,所有调用它的代码都要考量。。。。
zhuyf87 2014-03-19
  • 打赏
  • 举报
回复
“我之前的导出很简单,就是在类定义时声明接口导出整个类” 这样做有什么不好吗?
冰与火 2014-03-19
  • 打赏
  • 举报
回复
引用 5 楼 max_min_ 的回复:
c++ 就没有什么优雅可言!
max_min_ 2014-03-19
  • 打赏
  • 举报
回复
c++ 就没有什么优雅可言!
冰与火 2014-03-19
  • 打赏
  • 举报
回复
引用 1 楼 akirya 的回复:
优雅的做法是不导出类。只导出C函数
可是,很多时候,C++类还是很方便的。

65,209

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧