2010-01-06 6 views
1

J'ai écrit une classe pour la gestion des tampons de mémoire GPU. J'ai une méthode pour construire un tampon initialisé avec un morceau de mémoire CPU (si pData est nul, alors le bloc alloué de la mémoire GPU n'est pas initialisé, reste avec des valeurs indéterminées) et une surcharge pour le construire initialisé avec la même valeur d'octet:problème de surcharge dans VS2008 C++/CLI

IBuffer* CreateBuffer(IDevice* pDevice, int byteWidth, const void* pData); 
IBuffer* CreateBuffer(IDevice* pDevice, int byteWidth, byte fillValue); 

les cas d'utilisation sont:

CreateBuffer(pDev, 512, pData); //OK 
CreateBuffer(pDev, 512, nullptr); //OK 
CreateBuffer(pDev, 512, 0xCD); //OK 
CreateBuffer(pDev, 512, 0x01); //OK 
CreateBuffer(pDev, 512, 0x00); //error: ambiguous call to overloaded function 

Bien sûr, je peux forcer un plâtre ou changer le nom de la méthode pour résoudre le problème. Je me demandais simplement s'il y avait un problème plus sérieux quelque part ou si c'était juste une restriction/un bug du compilateur.

Merci!

+0

Évitez d'utiliser void * dans un programme C++/CLI. IntPtr est sans ambiguïté. –

+0

TFTT. Ça fonctionne maintenant. – Stringer

Répondre

3

Ceci est "By Design". Dans ce cas, vous essayez de passer ce qui est susceptible de se compiler dans un slot qui peut prendre un byte ou un const void*. La valeur constante 0x00 est convertible en byte et en const void*. Aucune de ces conversions n'est préférée et donc les erreurs du compilateur sur une ambiguïté.

+0

Yup, c'était à peu près mon cas. – Stringer