'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
    3

    Kann 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 👍


Anmelden zum Antworten