Ich lese Caffe-Code und finde es Split C++ - Klasse Template-Code in hpp und cpp-Dateien. Beispielsweise enthält Net.cpp den Net-Implementierungscode der Schablonenklasse und Net.hpp enthält die Definition. Aber ich erinnere mich, dass es nicht möglich ist, eine Template-Klasse in hpp- und cpp-Dateien aufzuteilen, wie funktioniert das caffe? Danke.Wie teilt Caffe Vorlage Klassencode in cpp und hpp-Dateien?
Antwort
Wie Sie notierten, template definitions cannot be split up as easily from the declarations ohne durch einige Reifen zu springen.
Ein häufiges Muster ist es, sie in verschiedenen Dateien für den menschlichen Leser zu teilen, aber im Wesentlichen sind sie immer noch alle in einem Header definiert. Zum Beispiel
foo.h
#pragma once
template <typename T>
void Foo(); // declaration
#include "Foo.inl"
Foo.inl
template <typename T>
void Foo()
{
// actual definition
}
Beachten Sie, dass das letzte, was in der .h
Datei enthält den vollständigen Inhalt der .inl
Datei tatsächlich ist . Soweit der Compiler betroffen ist, sind alle Template-Definitionen in der Kopfzeile enthalten, um das von Ihnen erwähnte Anfangsproblem zu lösen. Aber für den menschlichen Leser sind die Erklärungen und Definitionen getrennt.
Sie können die Template-Definition und Verzögerung normalerweise nicht "trennen". Wenn der Compiler die Vorlage instanziiert, muss er genau die Definition und die Deklaration der Member kennen, die im Kontext verwendet werden. Wenn Sie also nur die Header-Datei angeben, kann der Compiler die Vorlage für den Template-Parameter nicht instanziieren.
Eine andere Lösung als die, die coryKramer erwähnt, ist nach der vollständigen Definition (in der .cpp-Datei) explizit die Vorlage für die Template-Parameter zu instanziieren, auf diese Weise ist die Vorlage bereits instanziiert für die Werte, die Sie würden gerne verwenden (an dieser Stelle haben wir die vollständige Deklaration und Definition der Vorlage). Beachten Sie jedoch, dass Fehler auftreten können, wenn die Vorlage für andere Werte instanziiert werden muss, da der Compiler nicht weiß, wie dieser Prozess ausgeführt wird, wenn die Vorlage in dieser Datei nicht vollständig definiert ist!
Dies ist die Methode, die in Caffe via INSTANTIATE_CLASS (Net) -Makro am Ende der CPP-Datei verwendet wird.
Vielen Dank, ich habe nur den Code nachgeschlagen und Sie haben Recht. Wie verhält sich caffe mit Funktionsschablonen wie Funktionen in caffe/util/math_functions.cpp und math_functions.hpp? – XiongJi
- 1. Array-Klassencode
- 2. die Schicht Faltung Customizing in caffe Fenstern cpp
- 3. Wie teilt man die große HAML Vorlage
- 4. Wcf referenziert Klassencode-Update
- 5. libcaffe Fehler in cpp Eclipse
- 6. Verzeichnisstruktur und Beschriftung in Caffe
- 7. Angular 2 - Wie teilt man Komponentendaten mit der übertragenen Vorlage
- 8. Refactoring Qt Quick Cpp-Klasse in Header und .cpp
- 9. Constructor und Variablendeklaration in Cpp
- 10. Tonaufnahme in CPP und Qt
- 11. Python in CPP eingebettet: Wie Daten zurück zu CPP
- 12. Generieren Sie xsd-Annotations- und -Dokumentationstags aus dem C# -Klassencode
- 13. Understanding Caffe Bibliothek
- 14. Wie realloc in cpp verwenden
- 15. Eingabe Layer-Typ: ImageData in Windows caffe cpp geben Blank Output
- 16. Wie man Python (2.7.3) und cpp verbindet
- 17. Unterschied zwischen Trainings- und Testphase in Caffe
- 18. Kompilieren von C++ - Code mit Caffe und Eigenen
- 19. Eingangsgrößen, SoftmaxWithLoss und Labels in Caffe verstehen
- 20. Wie teilt man in Spark?
- 21. Handler-Klassencode, der nicht ausgelöst wird
- 22. C++ Makefile Header und cpp
- 23. Warum wird dieser innere Klassencode kompiliert?
- 24. cpp- statische Mitglied und Funktion
- 25. Legendes Ein- und Spektive und caffe
- 26. wie iter_size wie caffe in tensorflow implementieren
- 27. ActiveMQ-CPP und Visual Studio 2003
- 28. Initialisierte Prioritätsvariable in Klassen- und cpp-Kernrichtlinien?
- 29. CPP-Erweiterung und mehrzeilige Literale in Haskell
- 30. Erwarteter primärer Ausdruck in Header und cpp
verwandt: https://stackoverflow.com/questions/115703/storing-c-template-funktion-definitions-in-a-cpp-file – NathanOliver