module, importexport

Die Deklarationen module, import und export sind in C++20 verfügbar und erfordern den Compilerschalter /std:c++20 oder höher. Weitere Informationen finden Sie unter Übersicht über Module in C++.

module

Platzieren Sie eine module Deklaration am Anfang einer Modulimplementierungsdatei, um anzugeben, dass der Dateiinhalt zum benannten Modul gehört.

module ModuleA;

export

Verwenden Sie eine export module Deklaration für die primäre Schnittstellendatei des Moduls, die standardmäßig eine Erweiterung .ixx aufweist. Wenn Sie eine andere Erweiterung verwenden möchten, verwenden Sie den Schalter "/interface" , um sie als Modulschnittstelle zu kompilieren.

export module ModuleA;

Verwenden Sie in einer Schnittstellendatei den export Modifizierer für Namen, die Teil der öffentlichen Schnittstelle sein sollen:

// ModuleA.ixx

export module ModuleA;

namespace ModuleA_NS
{
   export int f();
   export double d();
   double internal_f(); // not exported
}

Nicht exportierende Namen sind für Code, der das Modul importiert, nicht sichtbar:

import ModuleA;

int main() {
  ModuleA_NS::f(); // OK
  ModuleA_NS::d(); // OK
  ModuleA_NS::internal_f(); // Ill-formed: error C2065: 'internal_f': undeclared identifier
}

Das export Schlüsselwort wird möglicherweise nicht in einer Modulimplementierungsdatei angezeigt. Wenn export auf einen Namespacenamen angewendet wird, werden alle Namen im Namespace exportiert.

import

Verwenden Sie eine import Deklaration, um die Namen eines Moduls in Ihrem Programm sichtbar zu machen. Die import Deklaration muss nach der module Deklaration und nach allen #include Direktiven, aber vor Deklarationen in der Datei angezeigt werden.

module ModuleA;

#include "custom-lib.h"
import std;
import myModule;

// begin declarations here:
template <class T>
class Baz
{...};

Hinweise

Beide import und module werden nur dann als Schlüsselwörter behandelt, wenn sie am Anfang einer logischen Zeile auftreten.

// OK:
module ;
module module-name
import :
import <
import "
import module-name
export module ;
export module module-name
export import :
export import <
export import "
export import module-name

// Error:
int i; module ;

Microsoft-spezifisch

In Microsoft C++ sind die Token import immer Bezeichner und module niemals Schlüsselwörter, wenn sie als Argumente für ein Makro verwendet werden.

Beispiel

#define foo(...) __VA_ARGS__
foo(
import // Always an identifier, never a keyword
)

Ende Microsoft-spezifisch

Siehe auch

Übersicht über Module in C++
Importieren der C++-Standardbibliothek mithilfe von Modulen