6

使用本机 c++,我的意思是,不是托管 c++,不是 cli,不是来自微软的任何特殊东西,我可以:

1) 获得高性能 2) 使用现有的 c++ 代码库和引擎 3) 编写跨平台代码(例如,用于 ios 和 android)

它不需要完全是原生 c++,我可以使用托管代码来做 ui 的事情,比如 ios 中的 object-c 和 android 中的 java,但是除了接口,我可以使用原生 c++ 代码吗?

4

2 回答 2

7

我建议您看一下这里的演示文稿:使用 C++ 中的 Windows 运行时,尤其是 Herb Sutter 的评论。我引用:

请回答这个问题:如果我决定以 Metro 风格编写 C++ GUI 应用程序,我是否被迫对 GUI 组件使用所有这些专有的 ref、sealed、^、Platform::String^ 扩展?

@Tomas:不,您不会被迫使用它们。我们提供两种支持的方式:

1) 这些语言扩展 (C++/CX)。

2) C++ 模板库 (WRL),请参阅 Yannick 提到的 Windows Kits\8.0\Include\winrt\wrl。WRL 是一种类似于 ATL 的基于 C++ 库的解决方案,它提供了我认为您正在寻找的东西——模板包装器/便利类和显式智能指针等。

于 2012-10-26T15:57:12.497 回答
3

是的,您绝对可以,完全支持真正的原生 C++。

但是,您确实必须使用新的 WinRT 库来执行用户界面或系统调用,尽管它们是本机代码并且可以直接从 C++ 完全调用,但它们的接口确实让这样做非常痛苦,因为一切都是引用计数COM 对象,此外,创建它们的实例并不像调用“new”那么容易,因此您必须编写很多丑陋的代码才能做到这一点。

正如前面的回答所说,微软提供了两种方法来帮助解决这个问题。一种是通过对 c++ 的语言扩展,另一种是 c++ 模板库。就我个人而言,我认为这两者对于做像调用 API 这样简单的事情都是相当丑陋的,但这只是我 :)

但是要回答您的问题,完全可以用真正的原生 C++ 编写您的应用程序。您根本不需要为任何事情使用托管代码。但是您可能希望使用语言扩展或模板库来更轻松地调用 API。

就我个人而言,我希望有人为 WinRT 编写一个包装器,将最必要的功能公开为一个更可用的 c++ 本机库,然后每个人都可以从 c++ 中使用它......

于 2012-10-28T09:37:51.690 回答