有关VS2008 C ++ / CLI中的重载问题

时间:2010-01-06 17:27:04

标签: visual-studio-2008 c++-cli compiler-errors

我编写了一个用于管理GPU内存缓冲区的类。

我有一种方法可以构建一个用一块CPU内存初始化的缓冲区(如果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 个答案:

答案 0 :(得分:3)

这是“按设计”。在这种情况下,您试图将可能编译为int的内容传递给可以采用byteconst void*的插槽。常数值0x00可转换为byteconst void*。这些转换都不是首选,因此编译器会出现歧义错误。