Un pointer void* est un juste un pointer pouvant pointer sur n'importe quoi.
Il faut absolument le cast pour pouvoir l'utiliser.
Dans ta fonction tu as 2 MPI_Datatye qui sont sans doute des enums pour décrire le type du pointer.
Tu dois faire un switch dessus et faire un cast en fonction de la valeur.
switch(sendtype) {
case MPI_Datatype::eInt:
auto sendBuffer = static_cast<int*>(sendbuf);
}
C'est étonnant d'avoir ce genre de fonction en C++, pourquoi toujours coder en C++ comme en C ?
En C++, tu devrais utiliser des templates.
Pour moi, les seules raisons d'utiliser des void* c'est pour avoir un container contenant plusieurs types ou pour utiliser une api C qui t'y force.
Les void* sont plus lents (des indirections pour cast sur le bon type) et sont dangereux à utiliser.