Instanziiertes Template anfordern



  • Guten Morgen

    Gibt es in C++ die Möglichkeit, (natürlich zur Compiletime) eine Instanziierung eines Templates anzufordern? Sowas wie:

    template</* Verschiedenes */>
    struct some_attribs {
    };
    
    template</* hier wird eine Instanziierung von some_attribs gefordert */>
    struct foo
    {
    };
    


  • Was hast du genau vor?
    Ich kann mir unter der Fragestellung nichts vorstellen



  • Ist Template Specialization vielleicht was du suchst?
    Sonnst müsstest du uns dein Anliegen schon etwas ausführlicher schildern.


  • Mod

    Explizite Instantiierungen kennst du wahrscheinlich?

    Soll es genau dann instantiiert werden, wenn foo instantiiert wird? Mit welchen Argumenten?



  • Die eigentliche Frage ist doch warum du die explizite Instanziierung im Template Parameter brauchst. Bedenke, Templates werden durch Typen parametrisiert. Wenn du ein Template instanziieren musst, ist es keine Parameter mehr, sondern eine Spezialisierung.

    Als Analogie:
    Was du machen willst ist eine Funktion schreiben, von der du dann im nachhinein forderst das zB. Parameter 3 immer 42 sein muss. Das hat keinen Sinn.

    Willst du eher sowas?

    template <typename T>
    struct foo 
    {
      typedef some_attribs<T> foo_attribs;
      //...
    }
    


  • Das war mir nicht bewusst, dass die Fragestellung so missverständlich ist.

    Also some_attribs ist quasi ein Parameterpaket und foo soll solche Parameterpakete (nur Instanziierungen von some_attribs !) als Template-Argument annehmen.



  • Also doch partielle Spezialisierung??

    //
    template <typename> struct foo;
    
    // foo nur für some_attrib
    template <typename... T>
    struct foo<some_attrib<T...>> 
    {
    //...
    };
    

Log in to reply