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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de