spezialisierung von der groesse des datentyps abhaengig machen



  • hola leute

    gibt es eine moeglichkeit, das ich eine template-funktion so spezialisiere,
    das sie (unteranderem) von der groesse des datentyps abhaengig ist?
    ich hab eine template-funktion fuer pods. jetzt muss ich fuer jeden pod-typ
    eine spezialisierung machen. die jeweilige spezialisierung haengt aber nicht exakt von dem pod-typ ab, sondern nur von seiner groesse. wie mach ich das dann am besten ?

    z.b.
    long auf meinem system ist gleich gross wie int oder unsigned int.
    muss ich trotzdem fuer alle 3 eine spezialisierung machen?

    cermy

    Meep Meep



  • Hi

    Ich versteh nicht ganz was jetzt deine Frage ist.. Aber zu der Sache mit den Datentypen: Soll ja einer der größten Nachteile von C++ sein, dass nicht einwandfrei festgelegt ist, welche Größe short, int und long haben.
    Naja, mein Compiler nimmt __int16, __int32 und __int64. Damit sollte ja unmissverständlich klar sein, welche Größe der Datentyp hat.
    Magst du deine Frage zu den Templates noch ein bisschen genauer stellen?

    Edit: Du kannst ein Template nicht direkt von der Größe des Datentyps abhängig machen (also ein Template für 16 bit / 32 bit /... ). Aber wenn du als Templateparameter einen Typ wie __int32 übergibst, ist das Template doch von der Typgröße abhängig (irgendwie indirekt...).
    Bin heute morgen noch nicht so richtig wach, also sorry für meine etwas undeutliche Argumentation 😃



  • Klar geht das - irgendwo in den Tiefen der Template Metaprogrammierung.

    schnell hingeschrieben ohne Garantie auf Gültigkeit und Korrektheit:

    //beliebige Datentypen
    template<size_t size>
    class Type_impl
    {
      ...
    };
    
    //char und Varianten
    template<>
    class Type_impl<1>
    {
      ...
    };
    
    ...
    
    template<typename T>
    class Type : public Type_impl<sizeof(T)>
    {};
    

    (aber eventuell solltest du darüber nachdenken, ob du wirklich von der Datengröße abhängig sein willst (und ob deine Spezialisierung für int und long auch mit einem char* zurechtkommt).



  • re

    @CStoll

    das passt schon so. bin danach auch auf deinen weg gekommen.
    habs nur bissl anders geloest und hab es ohne vererbung gemacht.
    brauch ich fuer nen bitzaehler, der je nach groesse des datentypes anders arbeitet. deshalb reicht mir die spezialisierung rein auf die groesse.

    Meep Meep


Log in to reply