Udostępnij za pośrednictwem


module, , importexport

Deklaracje module, importi export są dostępne w języku C++20 i wymagają przełącznika /std:c++20 kompilatora lub nowszego. Aby uzyskać więcej informacji, zobacz Omówienie modułów w języku C++.

module

Umieść deklarację module na początku pliku implementacji modułu, aby określić, że zawartość pliku należy do nazwanego modułu.

module ModuleA;

export

export module Użyj deklaracji dla podstawowego pliku interfejsu modułu, który domyślnie ma rozszerzenie.ixx. Jeśli chcesz użyć innego rozszerzenia, użyj przełącznika /interface , aby skompilować go jako interfejs modułu.

export module ModuleA;

W pliku interfejsu export użyj modyfikatora nazw, które mają być częścią interfejsu publicznego:

// ModuleA.ixx

export module ModuleA;

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

Nazwy nieeksportowane nie są widoczne dla kodu, który importuje moduł.

import ModuleA;

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

Słowo export kluczowe może nie być wyświetlane w pliku implementacji modułu. Po export zastosowaniu do nazwy przestrzeni nazw eksportowane są wszystkie nazwy w przestrzeni nazw.

import

import Użyj deklaracji , aby nazwa modułu był widoczny w programie. Deklaracja import musi pojawić się po deklaracji module i po jakichkolwiek dyrektywach #include , ale przed wszelkimi deklaracjami w pliku.

module ModuleA;

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

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

Uwagi

Oba import i module są traktowane jako słowa kluczowe tylko wtedy, gdy pojawiają się na początku wiersza logicznego:

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

Specyficzne dla firmy Microsoft

W języku Microsoft C++tokeny import i module są zawsze identyfikatorami i nigdy słowami kluczowymi, gdy są używane jako argumenty makra.

Przykład

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

Koniec specyficzny dla firmy Microsoft

Zobacz także

Omówienie modułów w języku C++
Importowanie standardowej biblioteki języka C++ przy użyciu modułów