Partager via


module, import, export

Les déclarations module, import et export sont disponibles en C++20 et requièrent l'option du compilateur /std:c++20 ou une version ultérieure. Pour plus d’informations, consultez Vue d’ensemble des modules en C++.

module

Placez une module déclaration au début d’un fichier d’implémentation de module pour spécifier que le contenu du fichier appartient au module nommé.

module ModuleA;

export

Utilisez une export module déclaration pour le fichier d’interface primaire du module, qui a une extension .ixx par défaut. Si vous souhaitez utiliser une autre extension, utilisez le commutateur /interface pour le compiler en tant qu’interface de module.

export module ModuleA;

Dans un fichier d’interface, utilisez le modificateur export sur les noms destinés à faire partie de l’interface publique :

// ModuleA.ixx

export module ModuleA;

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

Les noms non exportés ne sont pas visibles par le code qui importe le module :

import ModuleA;

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

Le export mot clé peut ne pas apparaître dans un fichier d’implémentation de module. Lorsqu’il export est appliqué à un nom d’espace de noms, tous les noms de l’espace de noms sont exportés.

import

Utilisez une import déclaration pour rendre les noms d’un module visibles dans votre programme. La import déclaration doit apparaître après la module déclaration et après toutes les #include directives, mais avant toutes les déclarations dans le fichier.

module ModuleA;

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

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

Remarques

Les deux import et module sont traités comme des mots clés uniquement lorsqu’ils apparaissent au début d’une ligne logique :

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

Spécifique à Microsoft

Dans Microsoft C++, les jetons import et module sont toujours des identificateurs et ne sont jamais des mots clés lorsqu’ils sont utilisés comme arguments pour une macro.

Exemple

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

Fin de la partie spécifique à Microsoft

Voir aussi

Vue d’ensemble des modules dans C++
Importer la bibliothèque standard C++ à l’aide de modules