在c++20中有“模块”功能;我有兴趣拥有一个私有模块,该模块只能在我的库内使用,并且不适用于我的库的用户,这可能吗?
我希望有这样的东西:
//my_lib/private_module.ixx
export module my_lib_private_module;
...
//my_lib/public_module.ixx
export module my_lib_public_module;
import my_lib_private_module;
//some user code
import my_lib_public_module; //OK
import my_lib_private_module; //this must fail!
我尝试了一些,但没有成功。我正在使用 CMake 来配置我的库,我应该在那里有任何模块特定的东西吗?
是的,可以创建私有模块。您可以通过避免使用
export
关键字来做到这一点。
以下是实现此目标的方法:
export
的私有模块:// my_lib/private_module.ixx
module my_lib_private_module;
...
// my_lib/public_module.ixx
export module my_lib_public_module;
import my_lib_private_module;
...
对于 CMake 文件,您可以:
PRIVATE
中使用 target_sources
作为私有模块。PUBLIC
中的 target_sources
用于用户应该可以访问的公共模块。