问题标签 [c++-modules]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
375 浏览

c++ - 在 Makefile 中使用 C++ 模块

我想使用 C++20 中的新模块功能,据我了解,gcc 和 clang 似乎都实现了足够的可用功能。

现在,基本上我在网上看到的所有代码示例都分别编译所有模块并手动指定它们的顺序。有没有办法make自动找到不同模块之间的依赖关系?

我很想写一个Makefile基本上看起来像这样的:

但这显然是行不通的,因为make不知道模块需要按什么顺序编译。

所以:

  • 拥有适用于 C++ 模块的通用 Makefile 的正确方法是什么?
  • 对于使用 C++ 模块和的非平凡项目有一个很好的例子make吗?

此外:

  • 对于使用 C++ 模块和的非平凡项目有一个很好的例子cmake吗?
0 投票
1 回答
189 浏览

c++ - 是“模块”;c++-20 模块所需的语句

我一直在试验,并意识到在某些站点上,示例以以下行开头:

定义该文件是一个模块。

我的问题是双重的:

  • 是“模块”;将需要一个 c++ 模块
  • 它应该是区分模块文件和非模块文件(而不是文件扩展名)的一种方式吗?
0 投票
1 回答
133 浏览

c++ - C++ 模块是否使未命名的命名空间变得多余?

C++20 引入了模块。任何未在模块中导出的符号都具有模块内部链接。虽然未命名的命名空间提供了一种机制,使未命名命名空间内的定义具有文件内部链接。这是否意味着将来当模块在 C++ 社区中变得普遍时,未命名的命名空间将变得无用?

0 投票
1 回答
2412 浏览

c++ - 如何使用 g++ 在 c++ 20 中使用模块?

我阅读了此链接https://gcc.gnu.org/wiki/cxx-modules并尝试从该网站复制以下示例。我已经知道这个编译器部分支持模块系统。(注:我用的是windows)

我目前有GCC 11.0.1快照并尝试使用以下参数编译这些文件: g++ -std=gnu++2b -Wall -fmodules-ts hello.cc main.cc编译器给了我这些错误:

如果我先编译hello.cc,那么编译器仍然给出错误:

  • 我应该怎么办?
  • 我应该等待对 g++ 模块的完全支持吗?
  • 即使 g++ 部分支持它,还有其他方法可以使用它吗?
0 投票
1 回答
790 浏览

c++ - 如何在 CLang C++ 下编译/使用头单元模块?

文档中说 CLang 中的模块支持是部分的。我在最近发布的 LLVM 12.0 的 Windows 64 位下使用 CLang。

我成功地使用了常规模块(通过 导入import modulename;)。

但是我还没有设法创建和使用标题单元模块,那些你通过import "header.hpp";. 你能建议如何用例子来做到这一点吗?

为了尝试标题单元,我创建了下一个玩具文件:

你好.hpp

使用.cpp

然后我成功(我希望)将标头单元编译hello.hpp成 PCM 文件:

命令运行没有错误并产生hello.pcm. 如果您在没有-o标志 的情况下运行上面的命令,hello.hpp.gch则会创建文件。

然后我尝试编译use.cpp,但没有成功,不知何故它无法识别我的标头单元和/或找不到对应hello.pcm的 . 我想我错过了一些特殊标志,这些标志显示编译器它是标头单元。使用了下一个命令:

这给出了编译错误:

在 MSVC 下,我成功地使用了常规模块和标头单元模块。但不是在 Clang 中。你能帮我解决这个问题吗?或者告诉我可能还不支持 CLang 标头单元。

0 投票
0 回答
52 浏览

c# - 如何从 C# 调用 C++(20) 模块?

酒吧.ixx

可能的 C# 代码

如何从 C# 调用 bar 模块?

0 投票
2 回答
436 浏览

c++ - 如何定义导出的常量?

我一直在尝试新的模块功能,但我无法导出全局常量。导出似乎编译得很好,但是在导入编译器时抱怨没有声明常量。我的代码:

测试.cpp

主文件

我究竟做错了什么?我在 Linux 上使用 g++ 11.1.0:g++-11 -std=c++20 -fmodules-ts test.cpp main.cpp -o main

错误信息是:error: ‘my_constant’ was not declared in this scope

0 投票
0 回答
157 浏览

c++ - C++20 模块接口和#pragma 警告

我似乎无法让 VC++#pragma warning在模块接口中工作。有什么改变吗?

例子:

此外,如何对标头包含作为一个模块进行这种警告管理?IE

也会导致警告。这是同一个错误的一部分还是有特定的方法来禁用来自外部模块头的警告?

0 投票
3 回答
645 浏览

c++ - 在 C++ 中将类定义拆分为多个模块单元

有没有办法将类定义(实现)拆分为多个模块单元?如果一个或多个类的方法大到足以放置在单独的源文件中,这会很有帮助。我看到的最好的解决方案可能是模块接口文件中的类声明和单独的模块实现文件中的方法定义之一。但它不起作用,因为编译器没有看到类声明编译模块实现文件:

0 投票
1 回答
694 浏览

c++ - 如何导入 C++ 20模块?

我正在使用在 Windows 10 机器上运行的 Visual Studio 2019(社区版)。我创建了一个简单的控制台应用程序,我想导入格式模块,以便可以使用 std::format() 之类的东西。我收到一个错误,提示“找不到要导入的标头“格式”。我的代码基于 Horton 和 van Weet 的一本书,标题为“Beginning C++ 20”,该书以两行开头,即:import iostream(包含在尖括号中),后跟一行表示导入格式也包含在尖括号中的行。也许让我改写我的问题。Visual Studio 生成的代码显示#include iostream 但不允许我使用#include 格式。那么,我什么时候使用#include,什么时候使用import?