template spezialisierung



  • hola leute

    ich hab folgende template-funktion

    template<class T>
    inline void IOSBinaryWrite(std::ostream &out, const T &val)
    {
    ...
    }
    

    ist es nun moeglich, das ich die funktion auf einen std::vector<T> spezialisiere, wobei T noch nicht spezialisiert werden soll ?

    und noch ne frage: wie kann ich bei nem template parameter drauf kommen, das er ein z.b. zeiger ist?

    Meep Meep



  • Nicht spezialisieren, ueberladen!

    #include <iostream>
    #include <vector>
    
    template<class T> 
    void foo(T arg) { 
        std::cout << "foo<T>" << std::endl;
    }
    
    template<class T>
    void foo(T* arg) {
        std::cout << "foo<T*>" << std::endl;
    }
    
    template<class T> 
    void foo(std::vector<T> arg) { 
        std::cout << "foo<vector<T> >" << std::endl;
    }
    
    int main() {
        foo(0);
        foo((void*)0);
        foo(std::vector<int>());
    }
    


  • re

    hab mich wohl beim zweiten punkt etwas missverstaendlich ausgedrueckt.
    ich meinte is folgend:

    template<class T>
    inline void eine_funktion(T val)
    {
       // jetzt moechte ich ueberpruefen ob T ein zeiger ist oder nicht
    }
    

    Meep Meep



  • template<class T>
    bool isPointer(T) { return false; }
    
    template<class T>
    bool isPointer(T*) { return true; }
    


  • Oder auch:

    template<class T> struct IsPointer
    {
        static const bool Value = false;
    };
    
    template<class T> struct IsPointer<T*>
    {
        static const bool Value = true;
    };
    

Anmelden zum Antworten