如何在c中正确包含第三方开源?

我使用了几个第三方库,比如boost,我的项目中有一个类,我们称之为“MyClass”

“MyClass”的所有公共函数仅使用标准类型(int,char,string),但私有函数使用boost中的智能指针和其他库中的其他算法.

所以在我在H文件中编写类的声明(和它的函数)之前,我写了几个包含文件.

为了使项目编译,我将一些附加包含库添加到项目属性中.
一切正常.

问题是,当我想从另一个名为USERPROJECT的项目中使用这个类(该类是extern)时,我需要在USERPROJECT项目中包含MyClass.h文件,然后什么都不会编译,因为MyClass.h包含boost和其他东西没有在USERPROJECT中配置(我没有在这里配置其他包含库,我不想,因为他不需要知道它们,它们在MyClass类的私有函数中).

我的解决方案是什么?

>我应该将MyClass拆分为2类接口和实现接口吗?
>我应该从H和MyClass中删除所有包含并使用前向声明吗? (我尝试但未能编译)
>有更好的解决方案吗?

提前致谢

最佳答案 您可以使用pimpl习惯用法创建编译器防火墙:

// header file
class C
{
public:
    ...
private:
    struct Impl;
    boost::scoped_ptr<Impl> m;
};

// cpp file
struct C::Impl
{
    // data member that were in C previously go here //
};

这样使用头文件的代码就看不到你班级的内容了.这个成语在here中有详细解释.但是,如果你使用需要链接的boost库,你仍然可以得到链接错误.如果你只使用boost的头部部分,那么应该没有问题.

点赞