'Dereferenzieren' eines Pointer-Typen
-
Hallo zusammen,
der Titel klingt zwar etwas seltsam, aber ich habe folgendes Szenario.
Ich habe einen Vektor mit Zeigern. In einer Template-Funktion möchte
ich jetzt mit den Objekten darin arbeiten. Hierzu benötige ich
allerdings den Typen, auf den der Zeiger zeigt.Da ich es als gängiges Problem einstufe, wird boost(?) bestimmt etwas für
parat haben, ohne das Rad (etwa) wie folgt neu erfinden zu müssen:#include <iostream> #include <vector> template<typename T> class Dereferencer{}; template<typename T> class Dereferencer<T*>{ public: typedef T type; }; template<typename T> class TypePrinter{ public: void print(const T& t){ std::cout << t << std::endl; } }; template<typename T> void print(const T& t){ typedef typename Dereferencer<typename T::value_type>::type type; TypePrinter<type> printer; for(typename T::const_iterator it=t.begin(); it!=t.end(); ++it){ printer.print(**it); } } int main(){ std::vector<int*> vec; vec.push_back(new int(1)); vec.push_back(new int(2)); vec.push_back(new int(3)); print(vec); }1
2
3Kann mir jemand etwas bereits Existierendes vorschlagen?
Gruß,
XSpille
-
Schau mal in den Type Traits nach: http://www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/index.html
Müßte 'remove_pointer<>' sein...
-
Th69 schrieb:
Schau mal in den Type Traits nach: http://www.boost.org/doc/libs/1_46_1/libs/type_traits/doc/html/index.html
Müßte 'remove_pointer<>' sein...DANKE! Genau danach hab ich gesucht
