Compartir a través de


module, import, export

Las declaraciones module, import y export están disponibles en C++20 y requieren el modificador del compilador /experimental:module junto con /std:c++20 o posterior (como /std:c++latest). Para obtener más información, consulte Información general de los módulos en C++.

module

Coloque una declaración module al principio de un archivo de implementación de módulo para especificar que el contenido del archivo pertenece al módulo nombrado.

module ModuleA;

export

Use una declaración export module para el archivo de interfaz principal del módulo, que debe tener la extensión .ixx:

export module ModuleA;

En un archivo de interfaz, use el modificador export en los nombres destinados a formar parte de la interfaz pública:

// ModuleA.ixx

export module ModuleA;

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

Los nombres no exportados no son visibles para el código que importa el módulo:

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

Es posible que la palabra clave export no aparezca en un archivo de implementación de módulo. Cuando export se aplica a un nombre de espacio de nombres, se exportan todos los nombres del espacio de nombres.

import

Use una declaración import para hacer que los nombres de un módulo sean visibles en el programa. La declaración import debe aparecer después de la declaración module y después de cualquier directiva #include, pero antes de cualquier declaración en el archivo.

module ModuleA;

#include "custom-lib.h"
import std.core;
import std.regex;
import ModuleB;

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

Comentarios

Tanto import como module se tratan como palabras clave solo cuando aparecen al principio de una línea lógica:

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

Específicos de Microsoft

En Microsoft C++, los tokens import y module son siempre identificadores y nunca palabras clave cuando se usan como argumentos para una macro.

Ejemplo

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

End Microsoft Specific

Consulte también

Información general de los módulos en C++