Habe gerde keinen Compiler. Geht das?



  • template<typename T>
    struct A {};
    
    int main()
    {
        A<typeid(float)> aaa;
    }
    


  • Nein. Typeid liefert Runtime-Typinformationen 😉 . Templates wollen ihren Typen aber zur Compilezeit.



  • In C++0x wird folgendes gehen:

    A<decltype(0.1f)> aaa;
    

    🙂



  • Das ist doof! 😞 Ich habe einen void* zeiger auf ein template. Weiß aber die argumente des templates nicht. . .

    P.S: WTF is C++0x ?



  • ???????????? schrieb:

    P.S: WTF is C++0x ?

    Der nächste C++ Standard.



  • LordJaxom_lg schrieb:

    In C++0x wird folgendes gehen:

    A<decltype(0.1f)> aaa;
    

    Ist das fix? Also ein standardisiertes typeof? Wäre ja klasse.



  • Ja, soweit der Typ zur Compilezeit ermittelbar ist. Siehe dazu den Artikel C++09 (Teil 1) im Magazin.



  • Wie krieg ich denn nun den richtigen Zeiger? von void* nach A<int> oder A<float> oder sowas in der art .......



  • Was genau hast du denn vor?



  • Ich habe eine Klasse die die ganzen verschiedenen Template Instanzen verwalten muss... Um die zu speichern habe ich std::list<Basis von A>. Logischerweise besitzt dieser Basistyp keine Elementvariable, also Daten. Daher muss ich die wahre identität herausfinden ... 🙄



  • Tja,

    das würde schon ohne templates nicht funktionieren.
    C++ bietet hier als Standardvorgehen (und damit sicher und handy) "virtual" an...

    Wie kommen überhaupt die verschiedenen Typen zusammen in einen Container ? Irgendetwas müssen sie doch gemeinsam haben .... (was dann ein guter Kandidat für eine virtuelle Funktion ist).
    Wenn Du das Design der Basisklasse nicht verändern kannst, kannst Du immer noch "virtual-wrapper" drumherumbauen oder den häßlichen (weil aufwendigen und fehleranfälligen) Weg über "handgestricktes virtual" gehen....

    Gruß,

    Simon2.



  • Simon2 schrieb:

    Tja,

    das würde schon ohne templates nicht funktionieren.
    C++ bietet hier als Standardvorgehen (und damit sicher und handy) "virtual" an...

    Wie kommen überhaupt die verschiedenen Typen zusammen in einen Container ? Irgendetwas müssen sie doch gemeinsam haben .... (was dann ein guter Kandidat für eine virtuelle Funktion ist).
    Wenn Du das Design der Basisklasse nicht verändern kannst, kannst Du immer noch "virtual-wrapper" drumherumbauen oder den häßlichen (weil aufwendigen und fehleranfälligen) Weg über "handgestricktes virtual" gehen....

    Gruß,

    Simon2.

    Das habe ich mir auch überlegt. Jedoch müsste die virtuelle Funktion eine Template-Funktion sein!

    class Base
    {
    };
    
    template<typename T>
    class A : public Base
    {
       T data;
    
    public:
       template<typename T2>
       A& combine(A<T2>);
    };
    
    class Manager
    {
        std::vector<Base> db;
    
    public:
        void combine(int y, int z); //Macht was mit den Objekten aus db an der Stelle x und y
    };
    

Anmelden zum Antworten