【问题标题】:IDL file containing template methods包含模板方法的 IDL 文件
【发布时间】:2021-03-18 17:34:24
【问题描述】:

是否可以像这样在 IDL 文件中包含参数化方法:

runtimeclass A
{
    A();

    T f<T>();
};

有什么选择?

【问题讨论】:

    标签: c++ uwp idl


    【解决方案1】:

    Windows 运行时类型系统只支持一组固定的泛型类型,即Windows.Foundation 命名空间中的类型(如IAsyncOperation&lt;T&gt;EventHandler&lt;T&gt;)和Windows.Foundation.Collections 命名空间中的类型(如@987654325 @)。在定义您自己的类型时,即使是这些泛型类型也必须使用具体类型(例如 IVector&lt;HSTRING&gt;)进行专门化。

    与您指定的最接近的是使用IInspectable 作为您的参数类型/返回类型。这可以保存任何对象类型或任何标量值(通过IReference&lt;T&gt;),但编译器没有强制执行类型安全,也无法从参数等推断返回类型。

    如果您提前知道您的客户将使用哪些具体类型(例如 HSTRINGInt32),那么您可以在 ABI 级别将它们直接编码为 HSTRING FooString(HSTRING arg)Int32 FooInt32(Int32 arg),然后您的实现可以使用一个标准的模板化 C++ 函数。

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2015-05-08
      • 2015-03-05
      相关资源
      最近更新 更多