我编写了一个用于管理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
当然,我可以强制演员或更改方法名称以解决问题。我只是想知道某个地方是否存在更严重的问题,或者它是否仅仅是编译器限制/错误。
谢谢!
答案 0 :(得分:3)
这是“按设计”。在这种情况下,您试图将可能编译为int的内容传递给可以采用byte
或const void*
的插槽。常数值0x00可转换为byte
和const void*
。这些转换都不是首选,因此编译器会出现歧义错误。