包含模板方法的 IDL 文件

IDL file containing template methods

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

runtimeclass A
{
    A();

    T f<T>();
};

有哪些替代方案?

Windows 运行时类型系统仅支持一组固定的泛型类型,即 Windows.Foundation 命名空间中的类型(例如 IAsyncOperation<T>EventHandler<T>)和Windows.Foundation.Collections 命名空间中的那些(例如 IVector<T>)。在定义您自己的类型时,即使是这些泛型类型也必须专门化为具体类型(例如 IVector<HSTRING>)。

最接近您指定的是使用IInspectable作为您的参数类型/return类型。这可以包含任何对象类型或任何标量值(通过 IReference<T>),但是编译器没有强制执行类型安全,也无法从参数等中推断出 return 类型

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