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);
}