我正在尝试创建一个包含较低级别C库的Qt共享库,这意味着我不希望链接到库的调用代码访问该C库的头文件。
我正在执行here步骤,这似乎很简单。我在QtCreator中构建了一个SUBDIRS项目。库项目构建正常,所有类和C函数都标有扩展为Q_DECL_EXPORT的宏。该库定义了一些我想要包含在app项目中的标题。这里的问题是当我包含其中一个头时,链被跟随到包含的C库头,此时应用程序项目无法构建,因为它找不到该头。
Qt的文档特别指出了这个问题,但对于如何解决它却有点模糊。
#include <footronics/device.h>
class MyDevice {
private:
FOOTRONICS_DEVICE_HANDLE handle;
};
在部署库时,应该不依赖于内部头文件footronics / device.h或ui_widget.h。
那么,我怎样才能避免我从库中包含的标题,隐含地包含我正在包装的C库中的标题?
答案 0 :(得分:3)
如果您只使用指针或对共享库类的引用,则可以使用Forward Declarations:
class FooTronicsDevice;
class MyDevice {
private:
FooTronicsDevice* _device;
}
编译器不需要知道类的结构,以便定义指针(或引用)。
如果无法做到这一点,您可以使用Qt文档中建议的Pointer to Implementation惯用法。 这基本上意味着您将实现与公共接口分开。