2016-06-27 14 views
1

Ich lerne über C++ 1z Vorschlag für Module. Meine größte Hoffnung ist, dass es die Verwendung von dllimport, dllexport auf Windows ersetzen wird. Kann ich mit C++ 1z-Modulen .dll unter Windows und .so unter Linux erstellen und die Verwendung von dllimport/dllexport vermeiden? Wird das Modul export alles sein, was auf allen Plattformen und Compilern benötigt wird?Will C++ 1z Module ersetzen die Notwendigkeit für dllimport dllexport auf Windows

+1

In C++ 1z sind keine Module vorhanden. –

+0

Ich bin kein Experte des Standards, wo finde ich diese Informationen? – Nick

+1

Welche Informationen? –

Antwort

4

Leider nein.

Die Vorschläge für Module in C++ versuchen, mit Unzulänglichkeiten in den Headern umzugehen, die mit Code, der Header betrifft, besonders problematisch werden.

Vorlagen werden normalerweise vollständig in einer Kopfzeile implementiert. Dies bedeutet jedoch, dass der Inhalt einer Vorlage allen Präprozessordefinitionen unterliegt, die vor dem Einfügen der Kopfzeile auftreten.

Zum Beispiel, wenn Sie Ihre Vorlage i als Kennung verwendet, und einen Header mit so etwas wie #define i 2 geschieht, bevor die Vorlage per Kopf aufgenommen werden, könnte der Code wie folgt beginnen:

for (int i=0; i<10 ; i++) 

... aber nachdem der Präprozessor fertig ist, würde es wie folgt aussehen:

for (int 2=0; 2<20; 2++) 

... und das wird offensichtlich überhaupt nicht kompilieren.

Module beheben dies. Ein Modul wird unabhängig von einem Header kompiliert. Da es unabhängig kompiliert wird, ist ein Modul nicht von anderen Kopfzeilen betroffen, es sei denn, der Quellcode enthält diese Kopfzeilen.

Ebenso können alle Präprozessordefinitionen, die im Header vorgenommen werden, keinen der Code beeinflussen, der das Modul importiert. Die einzigen Namen in dem Modul, die in der Datei sichtbar werden, die dieses Modul importiert, sind die Namen, die explizit aus dem Modul exportiert werden.

2

Der dllexport wird weiterhin benötigt, aber ein dllimport wird wahrscheinlich automatisch sein. Zumindest in C++ Modules in VS 2015 Update 1 sagen, dass sie es in einem Kommentar:

Andrew Pardoe [MSFT]

@Matthias: Der Programmierer jetzt nur __declspec (dllexport) für Symbole sagen muss, die an DLL Grenzen exportiert werden sollen, . Die __declspec (dllimport) wird vom Compiler beim Aufruf eines Moduls erledigt.

Leider habe ich keine zuverlässigeren Informationen darüber gefunden.

+0

Es gibt also Hoffnung, dass ich kein Makro innerhalb des Moduls verwenden muss, um eine '.dll' zu verwenden. – Nick