Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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