проблема относительно перегрузки в VS2008 C ++ / CLI - PullRequest
1 голос
/ 06 января 2010

Я написал класс для управления буферами памяти графического процессора.

У меня есть один метод для создания буфера, инициализированного частью памяти ЦП (если pData имеет значение null, выделенный блок памяти GPU не инициализируется, оставаясь с неопределенными значениями), и перегрузка для его создания инициализируется то же значение байта:

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

Варианты использования:

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

Конечно, я могу вызвать приведение или изменить имя метода для решения проблемы. Мне просто интересно, есть ли где-то более серьезная проблема, вызывающая это, или это просто ограничение / ошибка компилятора.

Спасибо!

1 Ответ

3 голосов
/ 06 января 2010

Это «По замыслу». В этом случае вы пытаетесь передать то, что, вероятно, скомпилируется в int, в слот, который может занять либо byte, либо const void*. Постоянное значение 0x00 может быть преобразовано в byte и const void*. Ни одно из этих преобразований не является предпочтительным и, следовательно, ошибки компилятора в неоднозначности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...