Condividi tramite


module, import, export

Le moduledichiarazioni , importe export sono disponibili in C++20 e richiedono l'opzione /std:c++20 del compilatore o versioni successive. Per altre informazioni, vedere Panoramica dei moduli in C++.

module

Inserire una module dichiarazione all'inizio di un file di implementazione del modulo per specificare che il contenuto del file appartiene al modulo denominato.

module ModuleA;

export

Usare una dichiarazione di export module per il file di interfaccia principale del modulo, che ha un'estensione .ixx per impostazione predefinita. Per usare un'estensione diversa, usare l'opzione /interface per compilarla come interfaccia del modulo.

export module ModuleA;

In un file di interfaccia, utilizzare il modificatore export sui nomi destinati a far parte dell'interfaccia pubblica.

// ModuleA.ixx

export module ModuleA;

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

I nomi non esportati non sono visibili al codice che importa il modulo.

import ModuleA;

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

La export parola chiave potrebbe non essere visualizzata in un file di implementazione del modulo. Quando export viene applicato a un nome dello spazio dei nomi, vengono esportati tutti i nomi nello spazio dei nomi.

import

Usare una import dichiarazione per rendere visibili i nomi di un modulo nel programma. La import dichiarazione deve essere visualizzata dopo la module dichiarazione e dopo qualsiasi #include direttiva, ma prima di qualsiasi dichiarazione nel file.

module ModuleA;

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

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

Osservazioni:

Entrambi import e module vengono trattati come parole chiave solo quando vengono visualizzati all'inizio di una riga logica:

// 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 ;

Sezione specifica Microsoft

In Microsoft C++, i import token e module sono sempre identificatori e mai parole chiave quando vengono usati come argomenti di una macro.

Esempio

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

Fine della sezione specifica di Microsoft

Vedi anche

Panoramica dei moduli in C++
Importare la libreria standard C++ usando i moduli