我目前正在使用抽象类编写一个小型库。它是一个提供简单GUI创建类的库,如widget
,main_window
等。
我的目标是使用接口和工厂函数对应用程序进行编码,以创建实际对象。我使用cmake作为我的项目(对于信息,但并不重要)。我想在我的lib中包含抽象类(简单)和不同的引擎(如qt5_engine,gtk_engine,...)。
使用lib的客户端(我的应用程序)只能看到抽象接口和工厂函数(方法,lambdas,构建器类??)。构建lib时,我选择构建哪个引擎(只有一个)来获取libmy_lib.so。我的应用程序将使用libmy_lib.so,无论它是用我的qt5_engine还是gtk_engine编译的(每个引擎静态链接到my_lib)
最后,我可以简单地覆盖使用不同引擎编译的libmy_lib.so来更改我的应用程序使用的GUI。但我也想知道用不同的引擎实现这样的lib的一种干净的方法,以获得一个干净的代码,换句话说就是lib编程的“最佳实践”。
我找到了询问它的方式,因此,搜索它的方式><我接受了一个答案,这是“改变le lib文件来改变GUI”的一部分,但是如果你引用了库编码的干净方式,现代的方式,这将是非常棒的......
THX
答案 0 :(得分:1)
查找" ABI兼容性"。 Qt / KDE项目有一个很好的指导:
https://wiki.qt.io/Qt-Version-Compatibility https://community.kde.org/Policies/Binary_Compatibility_Issues_With_C++
极端版本将是" Hourglass Interface"模式,其中库的二进制接口是纯C,但它上面是内联的C ++ API,下面是C ++实现:
https://www.youtube.com/watch?v=PVYdHDm0q6Y
编辑:只是想补充一点:如果这些指南谈论不同版本之间的兼容性,那么您的库必须遵守不同后端的相同限制。