Rieccomi.
Ero senza compilatore, non potevo provare il codice e volevo assicurarmi che funzionasse.
Comunque per fare questo sicuramente devi usare i template perchè non sai a priori i tipi degli oggetti.
Poi usa un reinterpreter_cast a cui non importa se sono compatibili i tipi, fa solo una copia byte per byte della matrice in quella di destinazione.
codice:
template <class T1, class T2> void funzione (T1 **matrice1, T2 **matrice2) {
T2 **asd = reinterpret_cast<T2**>(matrice1);
}
int main ()
{
double **matrice1;
int **matrice2;
funzione(matrice1, matrice2);
}