- 主题:各位巨师, c++工程中的全局API一般用什么模式编写?
那是个编译器嘛,相对比较底层,用C API说得过去。
【 在 ArchLinux 的大作中提到: 】
: 说到C++库的C API,我觉得LLVM封装过的C API用起来还是很方便的。
:
--
FROM 76.126.252.*
interface那个 不就是插件吗?
facade是什么?我查查
【 在 DoorWay 的大作中提到: 】
:
: 对象之间有关系,首先考虑facade,封装成一个或几个接口供客户用。这样内部复杂,使用简单。
:
: 对象之间无关系,像Opencv那样的松散算法类,不提供全局对象,客户自己创建吧。我见过图形库(引擎)为了调优,内部有全局的缓存的,但并没说明。后来提了bug,也没改,只在接口上说明不支持多线程。
:
--
FROM 221.222.20.*
什么意思?dll的话,才是都一样吧。
【 在 smallball 的大作中提到: 】
:
: 如果导出的是dll接口,这样就死了,不能保证大家的模块都是同一个ABI
: 【 在 fanci 的大作中提到: 】
: : Free function 最佳,最好的做到接口与实现分离。
: : 不过 DestroyXXX 是不应该出现的。你可能应当返回一个 unique_ptr。
--
FROM 221.222.20.*
ABI的话,如果dll导出类,那么ABI肯定要保持一样,最好编译器和编译器的版本得一致。
而且涉及到内存的,比如unique_ptr如果被std::move,那么怎么保证是在同一个内存堆分配和释放?
md/mt得一致吧。
风险太大了,最好还是导出C接口或者伪COM或者真COM
【 在 xieyf 的大作中提到: 】
: 什么意思?dll的话,才是都一样吧。
:
--
FROM 218.30.116.*
就是插件。
facade就是把复杂过程封装成简单接口。—— 计算机软件领域里到处是这种,“5毛钱的概念,起了个50块的名字”。4gang那本书,拿编译器举的例子。
【 在 xieyf 的大作中提到: 】
: interface那个 不就是插件吗?
: facade是什么?我查查
:
--
FROM 36.45.56.*
楼主没说是不是封装成dll给别人用。只有封成dll才需要关心内存分配/释放的跨dll/exe边界的问题。
--
FROM 125.33.230.*
看需求怎么感觉应该搞一个工厂或者抽象工厂?
【 在 xieyf 的大作中提到: 】
: 一个很大的c++库, 有很多对象, 现在需要操作这些对象, 需要搞出一些公共的API来,
: 比如createXXObject, destroyXXObject这种, 这些api一般是写成对象的静态函数, 还是
: 直接写成C API? 还是写一个专用的global 静态类?
: ...................
--
FROM 123.139.165.*