私有 C++20 模块

问题描述 投票:0回答:1

在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 来配置我的库,我应该在那里有任何模块特定的东西吗?

c++ c++20 c++-modules
1个回答
0
投票

是的,可以创建私有模块。您可以通过避免使用

export
关键字来做到这一点。

以下是实现此目标的方法:

  1. 定义没有
    export
    的私有模块:
// my_lib/private_module.ixx
module my_lib_private_module;
...
  1. 在公共模块中导入私有模块:
// my_lib/public_module.ixx
export module my_lib_public_module;
import my_lib_private_module;
...

对于 CMake 文件,您可以:

  • PRIVATE
    中使用
    target_sources
    作为私有模块。
  • PUBLIC
    中的
    target_sources
    用于用户应该可以访问的公共模块。
  • 仅安装公共头文件和模块接口文件。
© www.soinside.com 2019 - 2024. All rights reserved.