C++ 在C+中使用第三方类+;头文件

C++ 在C+中使用第三方类+;头文件,c++,C++,假设有一个名为(包括名称空间)other::OtherClass的第三方类 这是头文件 class MyClass { public: ... private: other::OtherClass other_class_; ... } 如果此头文件是在生产环境中提供的,是否会考虑将实现公开给客户机 另一方面,在公共接口中使用第三方类是一个好主意还是不好?(请注意,第二个示例不一定将该类保存到私有成员中。) 在第一个示例中,客户机必须知道other::Other

假设有一个名为(包括名称空间)
other::OtherClass
的第三方类

这是头文件

class MyClass {
  public:
    ...
  private:
    other::OtherClass other_class_;
    ...
}
如果此头文件是在生产环境中提供的,是否会考虑将实现公开给客户机

另一方面,在公共接口中使用第三方类是一个好主意还是不好?(请注意,第二个示例不一定将该类保存到私有成员中。)

在第一个示例中,客户机必须知道
other::OtherClass
的大小并包含头文件。在第二个示例中,客户机需要能够构造
other::OtherClass
,如果没有提供工厂,则可能还需要头文件

做上述任何一个例子都有好的借口吗

如果这几乎不是一个好主意,那么设计上述类的通常方法是什么?

供应商必须通过提供的头文件向客户机公开一些库

也就是说,有一些技术可以在实现中隐藏数据和函数。更常见的技术之一是提供公共代理类和工厂函数,它们只向客户端公开少量的公共功能

至于第二个问题,最好在头文件中使用指向第三方类型的引用和指针,因为您可以将头文件中的类型转发声明为:

class other::OtherClass;

其中需要实际包含第三方头文件。这不会向库的客户端公开任何第三方详细信息。

使用公共标题界面,您应该尽可能少地做出承诺并公开最少的详细信息。其他一切都应该是实现细节

我看不出有任何理由将您的接口与第三方类紧密耦合,即使您不打算在将来更换供应商


在设计接口/impl时,有很多事情需要考虑。如果
other
是一个名称空间,您可以引用一个

,那么前向声明不应该是
namespace other{class OtherClass;}
class other::OtherClass;