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

这是头文件。

class MyClass {
  public:
    ...
  private:
    other::OtherClass other_class_;
    ...
}

如果这个头文件是在生产中提供的,是否会考虑将实现暴露给客户端?

另一方面,在公共(public)接口(interface)中使用第三方类是否是一个好主意? (请注意,第二个示例不一定将该类保存到私有(private)成员中。)
class MyClass {
  public:
    MyClass(const other::OtherClass& other_class);
    ...
  private:
    ...
}

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

做上面的任何例子有什么好的借口吗?

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

最佳答案

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

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

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

class other::OtherClass;

需要实际包含第三方头文件。这不会向您图书馆的客户公开任何第三方详细信息。

关于c++ - 在 C++ 头文件中使用第三方类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6527945/

10-13 07:55