Menü
Avatar von pre alpha
  • pre alpha

797 Beiträge seit 13.05.2006

Re: gegenseitiger Import/Templates

Rainer Grimm schrieb am 15.05.2019 22:30:

pre alpha schrieb am 15.05.2019 12:11:

Hallo Herr Grimm,
im Abschnitt Module-Implementation-Unit - Beispiel 3 haben Sie fälschlicherweise die main3.cpp statt math3.cpp angegeben.

Vielen Dank.

Da ich es selber iM nicht testen kann: Funktioniert der gegenseitige Import von Modulen, insbesondere wenn es sich um Templates handelt? Müssen diese im Interface implementiert werden (a) oder benötigt man auch eine Implementation-Unit (b)?
Falls zutrifft
b) sollte diese doch eine Header-Datei sein (.h, .hpp etc), oder?
a) sollte doch Folgendes funktionieren
Module 1

// mod1.cppm export import mod2; export module mod1; export { template <typename Type> Type foo(const Type& arg} noexcept { return arg; } template <typename Type> Type bar(const Type& arg} noexcept { return baz(arg); } }

Module 2

// mod2.cppm export import mod1; export module mod2; export { template <typename Type> Type baz(const Type& arg} noexcept { return foo(arg); } }

Main

import std.core; import mod1; // oder mod2 - sollte egal sein da sich beide Module gegenseitig reexportieren int main(const int argc, const char** argv) { std::cout<<bar(argc)<<std::endl; std::cout<<baz(argc)<<std::endl; return EXIT_SUCCESS; }

Besten Dank
pre alpha

Das geht aus zwei Gründen nicht.
1. Es gibt eine zirkuläre Referenz von Modulen. Um das Modul mod2 zu erzeugen muss das mod1 vorhanden sein. Das gleiche gilt anders herum.
2. Der reexportieren eines Modules geht nur nach dem module purview.

Ich bin verwirrt. Soweit ich es in Erinnerung habe sollten doch Module zirkuläre Abhängigkeiten auflösen können, was ja eben (auch) der Sinn der Sache ist ?! Ansonsten muß man sich doch eh mit Legacy-Dreck (Include-Guards, Forward-Declarations, etc) - entschuldigen Sie die Ausdrucksweise - herumärgern, was die Module ad absurdum führt.
Wo genau müssen Templates denn nun tatsächlich implementiert werden?

thx
pre alpha

Das Posting wurde vom Benutzer editiert (16.05.2019 00:50).

Bewerten
- +
Anzeige