C++隐藏继承的类
C++ hiding inherited class?
我试图从链接它的可执行文件中隐藏我编写的库的主类标头中包含的第三方文件。我的意思是:
我写了一个定义类a的库。类a继承自类B(在第三方库中定义)。示例:
// In A.h
#include “B.h”
class A : public B
{
A* something(A* val);
}
// In A.cpp
A* A::something(A*val)
{
// Do something
return val;
}
类B的头文件对环境进行了一些更改,这些更改非常适合我的库,但对链接我的库的任何可执行文件都是有害的。有人向我指出不透明指针是一个潜在的解决方案,尽管我不知道如何使用它们来隐藏"B"。
有人知道隐藏B.h的方法吗?对于解决方案,C++11是可以的,但链接到其他依赖项(如boost)不是一种选择。
在C++世界中隐藏"实现"的一种常见方法是使用Pimpl/Handle-body/bridge习语。
不要将类A公开给API的用户,而是使用一个只公开您想要的句柄类:
在A.h 中
class AImpl; // forward declaration
class A {
private:
AImpl* impl;
public:
foo();
bar();
}
然后在另一个文件中进行实际实现:
AImpl.h
#include <B.h>
class AImpl: public B {
private:
public:
foo();
bar();
somethingThatYouDontWantToExpose();
}
使用不透明指针的方法是向前声明需要使用的类,这样就不需要include
它们的定义。由于您不包括B.h
,所以库的客户端不会被它们的定义所污染。
// In A.h
class B;
class A
{
private:
B* opaque;
};
相关文章:
- 继承函数的重载解析
- 继承期间显示未知行为的子类
- 名称隐藏对静态函数继承的实例使用
- C++继承模板类:隐藏成员变量
- QScopedPointer 是否隐藏了多重继承
- 在继承的类构造函数中使用隐藏成员
- 使用私有继承来隐藏实现是个好主意吗
- C++隐藏继承的类
- 由多重继承隐藏的嵌套类
- 对继承的类隐藏的名称
- 具有不同签名的两个函数的继承隐藏了非虚函数
- 我如何使用接口隐藏我的实现,并且仍然使用继承构建类
- 为什么继承的函数隐藏在这个代码的基类中
- C++通过继承隐藏变量
- c++继承和名称隐藏
- 在c++中使用私有继承时是否可能隐藏重载方法?
- 访问隐藏的继承成员
- c++继承名称隐藏
- 部分隐藏的继承树
- 我如何使用 no除非我从继承列表中选择特定的隐藏函数