我有一个C++包装器类,它将一些硬件提取封装为:

class DeviceWrapper
{
private:
    PhysicalDevice mDevice;
};

有多种访问设备的类,其中大多数将底层设备作为其第一个参数,例如:
void someFunc(PhysicalDevice & device);

因此,我目前在包装器类中具有以下getter方法:
PhysicalDevice & DeviceWrapper::getPhysicalDevice()
{
    return mDevice;
}

我像这样使用它:someFunc(myWrapper.getPhysicalDevice());
但是,这看起来有点麻烦。有没有一种方法可以定义某种运算符,该运算符将返回对该设备的引用,然后我基本上可以在需要引用PhyscialDevice的任何地方使用对包装类的引用。

最佳答案

有两种常见的表达方式:

  • 提供隐式转换:

  • class DeviceWrapper
    {
        operator PhysicalDevice&() { return mDevice; }
    private:
        PhysicalDevice mDevice;
    };
    

  • 将函数重新实现为一种方法(由于另一个答案中提到的原因,我倾向于这种方法):

  • class DeviceWrapper
    {
        auto someFunc() { return ::somefunc(mDevice); }
    
    private:
        PhysicalDevice mDevice;
    };
    

    关于c++ - 用C++编写代理类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46848007/

    10-12 20:43