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;