Modules

Modules de vervangers van de Header bestanden

Modules zijn de vervangers van de "oude" header bestanden (zoals <iostream> en "cstdlib.h"

Momenteel zijn er nog maar weinig modules beschikbaar en moeten we nog gebruik maken van de oude headers of deze converteren om ze te importeren in een broncode bestand.

Hoe voegen we een module to aan een broncode bestand:

Vroeger gebruikte we de volgende code om een header toe te voegen:
#include <iosteam>
of
#include "Headerbestand.h"
dit zal gaandeweg vervangen worden door de volgende code:
import <iostream>;        // een bestaand header bestand dat wil willen converteren naar een module
import Foo;               // een module "Foo" die we zelf geschreven hebben.
Om de oude iostream header op deze manier te kunnen gebruiken moeten we deze eerst converteren naar een bruikbare module. Dit doen we door de iostream header te kopiëren naar dezelfde directory als ons programma en het volgende commando uit te voeren:
g++ -fmodules-ts -std=c++20 -c -x c++-system-header iostream
Vervolgens kunnen we onze module Foo gaan schrijven:
// FooModule.cpp
module;
#include <iostream>
#include <string_view>
export module Foo;
export void greeter (std::string_view const &name)
{
  std::cout << "Hello " << name << "!\n";
}
Het programma dat gebruik maakt van deze module kan dan zo geschreven worden:
// main.cpp
import Foo;
int main ()
{
  greeter ("world");
  return 0;
}

Dit programma maakt geen gebruik van de <iostream> module die we eerder hebben gemaakt, enkel van de Foo module die we geschreven hebben, dus het commando om dit te compileren is:g++ -fmodules-ts -std=c++20 FooModule.cpp main.cpp -o gegroet

Als je geen typefouten hebt gemaakt (en je hebt een versie van gcc-11 (of hoger) die werkt met modules heb je na het uitvoeren van dit commando een programma met de naam gegroet dat als je het uitvoerd de tekst "Hello world" op het scherm weergeeft.

Een voorbeeld dat wél gebruik maakt van de iostream module die we eerder gemaakt hebben is bijvoorbeeld:
// halloWereld.cpp
import <iostream>;        // let op de punt-komma, die is verplicht

int main()
{
    std::cout << "Hallo Wereld!" << std::endl;
    return 0;
}

Dit programma kunnen we compileren met het commando: g++ -fmodules-ts -std=c++20 hallowereld.cpp -o groeter