代码之家  ›  专栏  ›  技术社区  ›  elmattic

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

  •  1
  • elmattic  · 技术社区  · 15 年前

    我写了一个管理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 回复  |  直到 15 年前
        1
  •  3
  •   JaredPar    15 年前

    这是“设计的”。在这种情况下,您试图将可能编译为int的内容传递到一个插槽,该插槽可以采用 byte const void* . 常量值0x00可转换为两者 字节 . 这两种转换都不是首选的,因此编译器会在不明确的情况下出错。