una que programacion objetos metodos metodo estructura ejemplos clases clase atributos c++ templates matrix inline

que - C++: ¿Cómo usar parámetros de plantilla sin nombre en miembros de la clase?



que es un metodo en programacion ejemplos (1)

Los nombres de los parámetros de la plantilla son "locales" para cada declaración de plantilla. Nada le impide asignar un nombre. Lo que de hecho debe hacer si necesita referirse a ese parámetro más adelante (como usarlo como un argumento en la plantilla-id de la clase).

Entonces, mientras tienes esto en la definición de la clase:

template <typename T, typename = typename boost::enable_if<boost::is_scalar<T> >::type> class Matrix { public: Matrix(const size_t nrow, const size_t ncol); private: const size_t nrow_; const size_t ncol_; std::vector<std::string> rownames_; std::vector<std::string> colnames_; std::vector<T> data_; };

Puede definirlo fuera de la clase, por ejemplo, de esta manera:

template <typename AnotherName,typename INeedTheName> inline Matrix<AnotherName, INeedTheName>::Matrix(size_t nrow, size_t ncol) : nrow_(nrow), ncol_(ncol), rownames_(nrow_), colnames_(ncol_), data_(nrow_*ncol) {};

No olvide que, bajo circunstancias comunes, las plantillas solo se pueden definir en archivos de encabezado .

Estoy creando una clase simple de Matrix. Estoy intentando agregar un parámetro de plantilla sin nombre para asegurarme de que se usa con tipos integrales

#include <string> #include <vector> #include <boost/utility/enable_if.hpp> #include <boost/type_traits/is_scalar.hpp> template <typename T, typename = typename boost::enable_if<boost::is_scalar<T> >::type> class Matrix { public: Matrix(const size_t nrow, const size_t ncol); private: const size_t nrow_; const size_t ncol_; std::vector<std::string> rownames_; std::vector<std::string> colnames_; std::vector<T> data_; };

Me gustaría definir el constructor fuera de la definición de la clase

template <typename T,typename> inline Matrix<T>::Matrix(size_t nrow, size_t ncol) : nrow_(nrow), ncol_(ncol), rownames_(nrow_), colnames_(ncol_), data_(nrow_*ncol) {};

g ++ devuelve el siguiente error

Matrix.hh:25:50: error: invalid use of incomplete type ‘class Matrix<T>’ inline Matrix<T>::Matrix(size_t nrow, size_t ncol)

¿Sabes cómo resolver este problema?

Gracias por adelantado.