Ist es möglich, eine Klasse, die Standardargumente verwendet, weiter zu deklarieren, ohne diese Argumente anzugeben oder zu kennen?Standardvorlagenparameter mit Vorwärtsdeklaration
Zum Beispiel möchte ich eine boost::ptr_list<TYPE>
in einer Traits-Klasse deklarieren, ohne die gesamte Boost-Bibliothek in jede Datei zu ziehen, die die Merkmale enthält. Ich mag namespace boost { template<class T> class ptr_list<T>; }
, erklären, aber das funktioniert nicht, weil es nicht genau die wahre Klassendeklaration übereinstimmen:
template < class T,
class CloneAllocator = heap_clone_allocator,
class Allocator = std::allocator<void*>
>
class ptr_list { ... };
sind nur meine Optionen mit ihm zu leben oder boost::ptr_list< TYPE, boost::heap_clone_allocator, std::allocator<void*>
in meinen Zug Klasse angeben? (Wenn ich die letztere verwendet wird, werde ich auch boost::heap_clone_allocator
erklären weiterleiten müssen und umfassen <memory>
, nehme ich an.)
Ich habe durch Stroustrup Buch sah, SO, und der Rest des Internets und haben keine gefunden Lösung. In der Regel sind Leute besorgt, dass STL nicht enthalten ist, und die Lösung besteht darin, "nur die STL-Header aufzunehmen". Boost ist jedoch eine viel massivere und Compiler-intensive Bibliothek, also würde ich es lieber auslassen, wenn ich es nicht unbedingt tun muss.
Boost ist eine Sammlung von meist nur Header-Bibliotheken. Warum nicht nur die benötigten Komponenten (und deren Abhängigkeiten) verwenden? Um nicht zu sagen, dass es keine Arbeit gibt, aber das ist es, was wir normalerweise tun. – dirkgently
Ich mache - ptr_list ist die einzige Datei, die ich brauche. Das einzige Problem ist, dass ein einzelner Boost-Header eine Reihe anderer enthält. Eine einfache Anwendung von makedepend zeigt, dass * just * ptr_list mindestens 385 Dateien enthält: boosts config, detail, iterator, mpl, Präprozessor, range, smart_ptr, type_traits und Dienstprogramm - um die Hauptmodule zu benennen. Sie können sicher verstehen, wie ich diejenigen vermeiden möchte, wenn ich nicht muss. –
Kein Wunder, dass die Kompilationszeiten in die Höhe schießen. Ja, die Aufnahme von so vielen Dateien kann ärgerlich sein. Aber ich denke, die richtigen Fragen sind: Gibt es eine Möglichkeit, herauszufinden, warum diese Dateien enthalten sind? Können diese enthaltenen Dateien aufgeteilt werden, so dass nur die notwendigen Dinge enthalten sind. Es scheint keinen einfachen Ausweg zu geben. –