module, import, export

importDie moduleDeklarationen und export Deklarationen sind in C++20 verfügbar und erfordern den /experimental:module Compilerschalter zusammen mit /std:c++20 oder höher (z/std:c++latest. B. ). 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 Erweiterung .ixxaufweisen muss:

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 exportierte Namen sind für Code, der das Modul importiert, nicht sichtbar:

//MyProgram.cpp

import ModuleA;

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

Die export Schlüsselwort (keyword) werden 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.core;
import std.regex;
import ModuleB;

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

Hinweise

Beide und importmodule werden nur dann als Schlüsselwort (keyword) behandelt, wenn sie zu Beginn einer logischen Zeile angezeigt werden:

// 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 nie Schlüsselwort (keyword), wenn sie als Argumente für ein Makro verwendet werden.

Beispiel

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

End Microsoft Specific

Weitere Informationen

Übersicht über Module in C++