Nicht exportierende Funktionen in Vorlagen in C ++ - Modulen verwenden

8

Betrachten Sie das folgende Modul:

%Vor%

Und der folgende C ++ Code benutzt es:

%Vor%

Es kompiliert erfolgreich mit VS2015 Update 1 und funktioniert, aber wenn ich g durch f ersetze, beschwert sich der Compiler: error C3861: 'id': identifier not found .

Wie man es repariert?

    
Ignat Loskutov 03.03.2016, 12:25
quelle

1 Antwort

3

Sie haben dieses Problem wegen der Instanziierungsregeln für Vorlagen. Aus demselben Grund, wie Sie Templatendefinitionen in C ++ - Headerdateien einschließen (und sie nicht in separaten CPP-Dateien definieren), können Sie die Template-Funktion nicht auf diese Weise aus dem Modul exportieren.

Es ist keine gute Übung, Vorlagenfunktionen oder -klassen aus dem Modul zu exportieren, da Sie innerhalb dieses Moduls alle Instanzen haben sollten, die wahrscheinlich verwendet werden. Wenn Sie es jedoch aus irgendeinem Grund auf diese Weise implementieren möchten, sollten Sie die Funktion f () mit T als int im Modul, z. Fügen Sie unbrauchbaren Aufruf mit Integer-Argument innerhalb dieses Moduls hinzu.

    
CodeFuller 03.03.2016 13:45
quelle

Tags und Links