我编写了一个用于管理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

当然,我可以强制转换或更改方法名称来解决问题。我只是想知道是某个地方是否存在更严重的问题,或者仅仅是编译器限制/错误。

谢谢!

最佳答案

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

关于visual-studio-2008 - VS2008 C++/CLI中有关重载的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2014850/

10-16 05:17