variable anzahl von template parametern



  • Hi,

    template <const size_t DIM1, const size_t DIM2> ... kann ich die anzahl flexibel machen fuer den user?

    ich habe folgende klasse, wie ihr hier sieht wird ein 2d array erzeugt wenn ich 2 template parameter uebergebe... kann ich irgendwie 3 parameter uebergeben und dann den konstructor orig(L1, L2, L3) aufrufen?

    template <const size_t DIM1, const size_t DIM2>
    class foo {
    private:
      array orig;
    
    public:
      foo(): orig(DIM1, DIM2) {}
    };
    


  • Hallo,

    ich bin kein Profi in Templates und vorallem nicht in Variadic templates, aber ja, das geht. Vieleicht hilft dir das weiter: http://www.cplusplus.com/articles/EhvU7k9E/
    oder das hier (perfect forwarding mit variadic templates): http://stackoverflow.com/questions/6486432/variadic-template-templates-and-perfect-forwarding



  • Was ist denn array für ein Typ und wieso kann das beliebig viele Parameter nehmen?



  • Schon ...

    template< typename T, std::size_t ... > struct array_t;
    
    template< typename T, std::size_t dimension >
    struct array_t< T, dimension >
    {
    	typedef T data_t[ dimension ];
    	data_t data;
    	T & operator[]( std::size_t index ) { return data[ index ]; }
    
    };
    
    template< typename T, std::size_t dimension, std::size_t ... dimensions >
    struct array_t< T, dimension, dimensions ... >
    {
    	typedef typename array_t< T, dimensions ... >::data_t dimension_minus_one_data_t;
    	typedef dimension_minus_one_data_t data_t[ dimension ];
    	data_t data;
    	dimension_minus_one_data_t & operator[]( std::size_t index ) { return data[ index ]; }
    };
    

    aber warum?


Log in to reply