假设有一个名为(包括命名空间)的第三方类 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/