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
    };
    

Log in to reply