首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cppwinrt.exe工具如何知道使用哪个C++版本从.winmd文件生成头部?

cppwinrt.exe工具如何知道使用哪个C++版本从.winmd文件生成头部?
EN

Stack Overflow用户
提问于 2022-03-22 18:06:25
回答 1查看 151关注 0票数 1

我没有看到任何在cppwinrt.exe工具中指定“cppwinrt.exe版本”的开关!

(我的基本假设是cppwinrt.exe工具将C++ 17语法绑定到ABI,我不知道它如何绑定C++ 20或未来的更新版本语法)

类似地,C#/WinRT投影中的cswinrt.exe工具从.winmd文件生成.cs文件。同样的问题也适用,cswinrt.exe工具如何知道使用哪个"C#版本“生成.cs文件?

我也没有看到任何在C#工具中指定“cswinrt.exe版本”的开关!

最终目标:理解“语言版本”如何适合于WinRT语言预测

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 18:39:20

cppwinrt.exe工具不允许您指定C++语言标准。它只是默认为C++17,可以通过特征测试宏选择新的语言特性。

其结果是生成的头文件可以使用任何C++17编译器编译,也可以使用支持后续语言版本的编译器编译。

此时(C++/WinRT版本2.0.210922.5)有四个C++20特性正在使用:

  • C++20协同器,由#ifdef __cpp_lib_coroutine指令保护(尽管这实际上只是决定是否包含实验/目录中的coroutine头文件;coroutines自2015年以来就得到了支持)。
  • C++20模块由于客户端需要通过winrt.ixx声明显式地选择使用import,所以这是不受保护的。
  • 支持C++20范围(在2.0.210329.4中引入)。这是一个有趣的问题,因为没有任何代码更改需要C++20编译器。当客户端使用C++20标准库标头时,该特性只需为使用https://en.cppreference.com/w/cpp/header/ranges编译器的客户端亮起即可。
  • C++20 std::format (在2.0.210922.5中引入),由#ifdef __cpp_lib_format指令保护。

从根本上讲,C++/WinRT只是一个C++库。因此,它可以使用任何适合于提供语言自适应实现的技术。

我不知道C#/WinRT如何在内部运行,也不知道C#是如何运行的,所以我不能对此发表评论。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71576948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档