本周早些时候,Kenny Kerr 在 CppCon 2016 上 介绍了 C++/WinRT1。它是基于Modern的 Windows 运行时的标准 C++ 射影。
据我所知,C++/CX 编译器/预处理器/代码生成器不会接触标准的 C++ 代码,并且由于 C++/WinRT 是一个标准的 C++ 库,因此我的幼稚理解是,C++/CX 和 C++/WinRT 都可以在同一个项目中使用。
问题:
首先要弄清楚的是:我的幼稚解释是否正确?
如果是,C++/CX和C++/WinRT能在同一编译单元中使用吗?
如果它们不能放置在同一编译单元中,那么C++/CX和C++/WinRT可以以什么粒度混合使用?
在同一项目中,C++/WinRT能否使用使用C++/CX实现的类型?(我认为这可能很困难,因为C++/WinRT编译器需要从.winmd元数据生成头文件,所以存在对(预)编译器输出的依赖。)
如果有关于这些问题的答案,那么现在就可以决定如何将我的C++/CX项目转移到未来。
注1:Embracing Standard C++ for the Windows Runtime (on YouTube)。
据我所知,C++/CX 编译器/预处理器/代码生成器不会接触标准的 C++ 代码,并且由于 C++/WinRT 是一个标准的 C++ 库,因此我的幼稚理解是,C++/CX 和 C++/WinRT 都可以在同一个项目中使用。
问题:
首先要弄清楚的是:我的幼稚解释是否正确?
如果是,C++/CX和C++/WinRT能在同一编译单元中使用吗?
如果它们不能放置在同一编译单元中,那么C++/CX和C++/WinRT可以以什么粒度混合使用?
在同一项目中,C++/WinRT能否使用使用C++/CX实现的类型?(我认为这可能很困难,因为C++/WinRT编译器需要从.winmd元数据生成头文件,所以存在对(预)编译器输出的依赖。)
如果有关于这些问题的答案,那么现在就可以决定如何将我的C++/CX项目转移到未来。
注1:Embracing Standard C++ for the Windows Runtime (on YouTube)。
ref class
生成代码,以及.winmd元数据,因此在同一编译单元中使用来自C++/WinRT代码的ref class
可能会证明困难。在编译代码时,它需要.winmd输入,这是编译的产物。此外,我不知道C++/CX编译器是否从导入的.winmd数据中生成任何代码,这(潜在地)与C++/WinRT#include
冲突。 - IInspectable