【发布时间】:2021-03-18 17:34:24
【问题描述】:
是否可以像这样在 IDL 文件中包含参数化方法:
runtimeclass A
{
A();
T f<T>();
};
有什么选择?
【问题讨论】:
是否可以像这样在 IDL 文件中包含参数化方法:
runtimeclass A
{
A();
T f<T>();
};
有什么选择?
【问题讨论】:
Windows 运行时类型系统只支持一组固定的泛型类型,即Windows.Foundation 命名空间中的类型(如IAsyncOperation<T> 和EventHandler<T>)和Windows.Foundation.Collections 命名空间中的类型(如@987654325 @)。在定义您自己的类型时,即使是这些泛型类型也必须使用具体类型(例如 IVector<HSTRING>)进行专门化。
与您指定的最接近的是使用IInspectable 作为您的参数类型/返回类型。这可以保存任何对象类型或任何标量值(通过IReference<T>),但编译器没有强制执行类型安全,也无法从参数等推断返回类型。
如果您提前知道您的客户将使用哪些具体类型(例如 HSTRING 和 Int32),那么您可以在 ABI 级别将它们直接编码为 HSTRING FooString(HSTRING arg) 和 Int32 FooInt32(Int32 arg),然后您的实现可以使用一个标准的模板化 C++ 函数。
【讨论】: