template in template



  • Kennt jemand ne möglichkeit so was zu verwirklichen:

    template<class T>
    class bal {
    };
    
    template<class T>
    class blub {
    };
    
    blub<long> bu;
    bal<bu> ba;
    

    thx



  • Ohne zu sagen, was das ganze bringen soll: Nein.



  • Was soll in der Zeile

    bal<bu> ba;
    

    passieren?



  • Bei Templates gibt man ja einen Typen an (oder eine integrale Konstante) und nicht eine Instanz. Muss ja sowieso alles zur Compile-Zeit feststehen.



  • Bashar schrieb:

    Ohne zu sagen, was das ganze bringen soll: Nein.

    Das ganz soll folgendes bringen:
    bal ist eine template das über nen "normalen" datentyp wie ein long gelegt wird und für endian-komatibiliät sorgen soll (swap bytes auf MAC bzw. Win automatisch oder gar nicht).
    blub ist ein template das über nen "normalen" datentype gelegt wird und dessen sinn es ist, zu verhindern das der datentyp neu aufm stack angelegt wird. Stattdessen soll das datentyp in einen übergeben speicherblock gelegt werden. bsp:

    char buffer[128];
    blub<long> dummy_long(buffer,4); // verhält sich nach aussen wie ein long, nur das es nicht als eigenes objekt aufm stack liegt, sondern aufs 4. byte in buffer zeigt.
    

    Und was ich jetzt möchte:

    char buffer[128];
    blub<LittleEndian<long>> dummy_long(buffer,4); // verhält sich nach aussen wie ein Endian-sicheres long, nur das es nicht als eigenes objekt aufm stack liegt, sondern aufs 4 byte in buffer zeigt.
    

    🤡 🤡 🤡



  • Also eigentlich:

    template<class T> 
    class bal { 
    }; 
    
    template<class T> 
    class blub { 
    }; 
    
    typedef blub<long> bu; 
    bal<bu> ba;
    


  • CMatt schrieb:

    Kennt jemand ne möglichkeit so was zu verwirklichen:

    template<class T>
    class bal {
    };
    
    template<class T>
    class blub {
    };
    
    blub<long> bu;
    bal<bu> ba;
    

    Das geht natürlich nicht, da ein Template-Parameter einen Typen erwarten, nicht einen Wert (Ausnahme: non-type-Parameter. Das können aber nur Integrale-Typen sein).

    Meinst du vielleicht sowas:

    template<class T>
    class bal {
    };
    
    template<template <class> class T>
    class blub 
    {
        T<int> i_;
        T<long> j_;
    };
    
    int main()
    {
        blub<bal> b;
    }
    


  • THX! 🙂


Anmelden zum Antworten