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...