【问题标题】:Apple METAL C++ problem with MTL::CopyAllDevices();MTL::CopyAllDevices() 的 Apple METAL C++ 问题;
【发布时间】:2022-11-04 02:28:38
【问题描述】:

我正在尝试让 C++ 代码与 Metal 一起使用。

我通过调用得到 MTL:Device 的数组

NS::Array *device_array = MTL::CopyAllDevices();

接下来,我想通过调用获取 MTL::Device 数组的唯一元素

MTL::Device *device = device_array->object(0);

我收到一个错误:

Cannot initialize a variable of type 'MTL::Device *' with an rvalue of type 'NS::Object *'

问题:如何从 NSArray 中获取 MTL::Device 对象?

【问题讨论】:

    标签: c++ metal


    【解决方案1】:

    NS::Array 只包含NS::Objects,它不知道它包含什么,因此默认情况下.object(index) 返回NS::Object*,它是MTL::Device 的基类,因此不能自动转换。幸运的是 object 是一个模板,所以你可以这样做:

    MTL::Device *device = device_array->object<MTL::Device>(0);
    

    检索具有正确类的对象。

    请注意,这只是使用reinterpret_cast 实现的,因此无法检查您是否确实使用了正确的类,因此请谨慎使用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      • 1970-01-01
      • 2011-11-12
      • 1970-01-01
      • 2019-01-19
      相关资源
      最近更新 更多