[C++] Conversione tipi template

di il
5 risposte

[C++] Conversione tipi template

Ciao a tutti.
Ho realizzato questa matrice generica:
#include <iostream>
using namespace std;
 
template <class T>
class matrix{
        private:
        T **array;
        unsigned int rows;
        unsigned int cols;
        public:
        matrix(unsigned int r, unsigned int c);
        matrix(matrix & m);
        T* & operator[](unsigned int r) { return array[r]; }
        unsigned int getRows() const { return rows; }
        unsigned int getCols() const { return cols; }
        T getValue(unsigned int r, unsigned int c) { return array[r][c]; }
        void setValue(unsigned int r, unsigned int c, T value) { array[r][c] = value; }
        void showArray();
};
 
template <class T>
matrix<T>::matrix(unsigned int r, unsigned int c) {
  rows = r;
  cols = c;
  array = new T*[r];
  for(int i=0; i<r; i++)
    array[i] = new T[c];
}
 
template <class T>
matrix<T>::matrix(matrix & m) {
  int i, j;
  delete [] array;
  rows = m.getRows();
  cols = m.getCols();
  array = new T*[rows];
  for(i=0; i<rows; i++)
    array[i] = new T[cols];
  for(i=0; i<rows; i++)
    for(j=0; j<cols; j++)
      array[i][j] = m[i][j];
}
 
template <class T>
void matrix<T>::showArray() {
  int i, j;
  for(i=0; i<rows; i++) {
    for(j=0; j<cols; j++)
      cout << array[i][j] << "|";
        cout << endl;
  }
}
Avrei la necessità di costruire una matrice di elementi di tipo T data un'altra matrice di elementi di tipo Q.
La gestione della convertibilità tra le due tipologie devo lasciarla al compilatore ed utilizzare eventualmente le eccezioni.
Potete aiutarmi a realizzare questo costruttore? Ad oggi ho provato senza successo...

5 Risposte

  • Re: [C++] Conversione tipi template

    Se Q non è convertibile in T avrai un errore di compilazione.
    
    
    template <class T>
    class matrix {
       public:
           ...
              template <class Q>
              matrix(const matrix<Q>& m);
    
    };
    
    template <class T>
    template <class Q>
    matrix<T>::matrix(const matrix<Q> & m) {
      int i, j;
      rows = m.getRows();
      cols = m.getCols();
      array = new T*[rows];
      for(i=0; i<rows; i++)
        array[i] = new T[cols];
      for(i=0; i<rows; i++)
        for(j=0; j<cols; j++)
          array[i][j] = m[i][j];
    }
    
  • Re: [C++] Conversione tipi template

    shodan ha scritto:


    Se Q non è convertibile in T avrai un errore di compilazione.
    
    
    template <class T>
    class matrix {
       public:
           ...
              template <class Q>
              matrix(const matrix<Q>& m);
    
    };
    
    template <class T>
    template <class Q>
    matrix<T>::matrix(const matrix<Q> & m) {
      int i, j;
      rows = m.getRows();
      cols = m.getCols();
      array = new T*[rows];
      for(i=0; i<rows; i++)
        array[i] = new T[cols];
      for(i=0; i<rows; i++)
        for(j=0; j<cols; j++)
          array[i][j] = m[i][j];
    }
    
    che potrei però gestire con opportune eccezioni giusto?
  • Re: [C++] Conversione tipi template

    Di "compilazione" ...
  • Re: [C++] Conversione tipi template

    Hai ragione...
    quali potrebbero essere due tipi "convertibili"?
  • Re: [C++] Conversione tipi template

    Crossposting con un altro sito. Leggere il regolamento.
Devi accedere o registrarti per scrivere nel forum
5 risposte