Container::allocator_type verwenden
-
Ich schreibe eine Funktion die STL-Container verarbeitet, die Pointer-Typen enthalten können. Die Funktion kann die Objekte von dem Typ erzeugen. Wie kann ich dazu den Allocator des Containers verwenden?
-
Wenn ich das richtig sehe, garnicht. Der Allokator ist für T*'s, nicht für T's.
Außerdem ist der Container::value_type eh immer nur T. Du kannst zwar über Template-Spezialisierungen herausfinden, ob T ein Zeiger auf einen Typ U ist oder nicht, aber so richtig hilft das noch nicht, denn du hast keinen "passenden" Allokator für Typ U.
Gebe allerdings keine 100%ige Garantie auf Richtigkeit, da ich noch nicht sehr viel mit den STL-Allokatoren gearbeitet habe.
-
allocatoren besitzen für diesen zweck ein eingebettes klassentemplate rebind, das es ermöglicht, ausgehend von einem allocator A<T> zum allocator A<U> zu gellangen (also eine metafunktion, wenn auch nicht mpl-kompatibel). z.b.
template<typename T, typename A> void foo(std::vector< T*, A > v) { typedef typename A::template rebind<T>::other T_allocator; //usw }eine solche einrichtung ist auch zwingend notwendig, wenn wir bedenken, dass node-basierte container (list,set,map etc.) gar keine Ts allokieren.