c++ 嵌套的.so库对用户隐藏类

u3r8eeie  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(108)

我正在创建一个项目,我希望其他人能够在其中修改main.cpp文件,定义类B的对象,类B继承自类A。但我希望用户不能示例化类A的对象。
我可以使用这种结构吗?或者有更好的方法吗?

├── Alpha
│   ├── alpha.cpp
│   └── alpha.hpp
├── Beta
│   ├── beta.cpp
│   └── beta.hpp
├── main.cpp
└── CMakeLists.txt

类β依赖于α,主依赖于β。
如果我使用alpha的.so来构建beta。main中的用户仍然能够定义alpha吗?这是发布一个可以访问类B而不能访问类A的main.cpp文件的正确方法吗?谢谢。

c9qzyr3d

c9qzyr3d1#

我认为这里有两个不同的要求:

  • 如果您希望允许构造类型B的对象,但不允许构造B从其继承的类型A的对象,请将A的ctor设置为protected。
  • 如果希望包含Bbl的库链接到A,但不希望main链接到A,则在B中链接到A时将A声明为private(target_link_library(B PRIVATE A)

相关问题