Template Meta problem



  • Hi,

    ich habe folgende Templatemeta-Funktion um ein "loop unroll" zu erreichen, jetzt wollte ich Funktionspointer darauf übergeben, doch das will nicht da ich nicht weiß wie ich "typename T" einsetze ohne in Konflikte mit der letzten unroll-Funktion zu geraten.

    template<unsigned int num> inline void unroll(T data) 
    {    
        unroll<num-1>(data); 
    
        data ();
    }
    template<> inline void unroll<1>(T data) 
    { 
        data ();
    }
    

    Wie macht man sowas?



  • So wie ich das sehe, musst du daraus eine Klasse machen.
    (ich komme nur zur meldung error: partial specialization `unroll<T, 1>' of function template)

    So ginge es dann:

    template<class T, int n>
    struct unroll
    {
      void operator() oder so.
    }
    
    template<class T>
    struct unroll<T, 1>
    ...
    

    Ich denke aber, solche Optimierungen kann man aber besser gleich vom compiler machen lassen.


Log in to reply