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?