如何投影模板化的C++;通过c+将API连接到WinRT+/温特? 我有一个预先存在的原生C++库,我试图通过通过C++ /WiRT运行时组件来投影API来向UWP应用程序公开。我很难理解如何公开模板函数 以下示例C++类: struct ExampleClass { ExampleClass()=默认值; 模板 std::vector create_a_vector(); };

如何投影模板化的C++;通过c+将API连接到WinRT+/温特? 我有一个预先存在的原生C++库,我试图通过通过C++ /WiRT运行时组件来投影API来向UWP应用程序公开。我很难理解如何公开模板函数 以下示例C++类: struct ExampleClass { ExampleClass()=默认值; 模板 std::vector create_a_vector(); };,uwp,windows-runtime,c++-winrt,midl,winrt-component,Uwp,Windows Runtime,C++ Winrt,Midl,Winrt Component,这个例子显然是愚蠢的;事实上,模板化工厂正在创建另一个特定于库的类型(而不是std::vector),因此它是ExampleClass的成员是有原因的 我希望通过在我的IDL和运行时组件中明确声明和实现它们,来公开create_a_vector的一个子集专门化。例如,以下IDL将是理想的: namespace ExampleClassWinRT { [default_interface] runtimeclass ExampleClass { Exampl

这个例子显然是愚蠢的;事实上,模板化工厂正在创建另一个特定于库的类型(而不是
std::vector
),因此它是ExampleClass的成员是有原因的

我希望通过在我的IDL和运行时组件中明确声明和实现它们,来公开
create_a_vector
的一个子集专门化。例如,以下IDL将是理想的:

namespace ExampleClassWinRT
{
    [default_interface]
    runtimeclass ExampleClass
    {
        ExampleClass();
        IVector<String> CreateAVector<String>();
        IVector<Int32> CreateAVector<Int32>();
        IVector<UInt8> CreateAVector<UInt8>();
        IVector<ExampleClassWinRT.SomeOtherType> CreateAVector<ExampleClassWinRT.SomeOtherType>();
        // .. and so on
    }
}
目标C示例代码中使用的语法似乎是合法的,事实上许多WinRT API都是模板化的(
IVector
)。但是,我上面的MIDL语法无效,我没有找到任何关于如何通过MIDL和/或WinRT/C++创建模板化WinRT API表面的文档


是将本机C++库投影到WRRT中的方法吗?我找错树了吗?

发帖后,我发现谷歌搜索的恰当术语是“参数化类型”,而不是“模板化类型”。找到一些链接,这些链接似乎表明我的目的是明确禁止的:您不能直接在idl文件中使用此未定义的类型(例如CreateAVector()),它是无效的。如果你想在UWP应用程序中使用本地C++库API,你可以将C++库链接到UWP。有关更多详细信息,请参阅此。