8

C++/CLI 是非常强大的语言。它是唯一可以无缝组合托管和非托管代码的 CLR 语言。有多少软件开发人员(在这个网站上)使用这种语言?你在什么样的项目中使用它?是改编遗留代码还是创建原始软件?您能否将旧的托管 C++ 与新的 C++/CLI 进行比较?您如何看待 C++/CLI 的当前质量和未来?

4

4 回答 4

8

我用它来编写托管代码和本机代码之间的薄集成层。仅此而已。

它最著名的独特功能是能够无缝深入研究非托管代码并在整个过程中修改(或意外损坏)任何可写内存 - 这在一般编程中不是优势,但是当您需要它时,它很棒。但我想我会越来越少地需要它。您可以使用 /pure 标志编译 C++/CLI,但它真的变成了一种全新的语言。

不过,还有另外两个很大的独特功能:

  • 做一些有用的事情的析构函数。在 C# 中,析构函数是终结器。在 C++ 中,它是一个适当的确定性称为析构函数。这意味着 C++/CLI 拥有最完整的基础架构来处理IDisposable. C# 仅帮助客户端(通过using语句),但只有 C++/CLI 也帮助实现者。我希望有一天 C# 会吸收这一特性。

  • Duck 类型模板,可与 CLI 泛型一起使用。另一件在 C# 中非常有用的东西,尽管它可以在没有历史包袱的情况下更加无缝地制作。

但是 C# 已经足够好了,没有最后两件事,我一般不想使用 C++/CLI。

于 2009-04-01T07:42:28.910 回答
5

我已经将 C++/CLI 用于模拟项目。我进行实际计算的模拟引擎是一个用 C++ 编写的现有代码库。我需要有一个 GUI 前端,我成功地用 C++/CLI 进行了编码。

在我看来,该语言与 C# 一样易于编写代码,尽管在语法上有一点笨拙。也就是说,语法比微软早先提出的托管扩展要简单得多。

C++/CLI 最强大的特性之一就是能够简单地将现有的本机 C++ 代码重新编译为 MSIL。当然可能会有打嗝,但对于大多数应用程序来说,这应该是一个无故障的练习。

至于 C++/CLI 的适用性,我认为它将严格地保留为与 C++ 互操作性的语言。如果您正在编写一个全新的应用程序,那么选择 C++/CLI 而非 C# 的理由绝对为零。正如我所说,它后者使用起来有点尴尬。

于 2009-04-01T07:30:34.713 回答
4

我们广泛使用 C++/CLI。我们已经使用它将老化的 MFC 应用程序拖入 .Net 时代,因此我们现在可以用 C# 编写大多数新功能,并使用 C++/CLI 将其与遗留 MFC 代码集成,方法是包装本机类并编写新的托管业务对象. 在我们的旧程序集中,我们仍在用 C++/CLI 编写新功能。

我没有使用“托管 C++”的经验,但与 MFC 和 Visual C++ 相比,使用 C++/CLI 是一种乐趣。.它的语法比托管 C++ 或 Visual C++ 更简洁,即使是初级开发人员也能快速上手。

C++/CLI 中有一些有趣的行为,例如当您将本机对象传递给托管类的方法时,它会在本机对象周围放置一个瘦托管包装器(开发人员不可见),只是为了进行调用,但该垫片是组件私有的,因此不能从外部调用。与往常一样,有很多方法可以解决这个问题,但它很早就让我们出局了几次。

我们使用 Visual Assist X 进行重构支持(可接受),使用 MbUnit/Gallio 对托管类进行单元测试,使用 NMock 或 RhinoMocks 进行模拟框架。

总的来说,我想说这种语言拯救了我们的产品,让我们能够利用开发世界中所有令人兴奋的新事物。如果我们仍然只使用 Visual C++/MFC,那么我们将很难招募开发人员,并且在 COTS 的选择上比我们使用 .Net 时受到的限制要大得多。

于 2009-04-22T09:48:21.813 回答
3

C++/CLI 非常简单地将CLR 带入 FreeSWITCH。比处理托管 API 或使用 Mono 要容易得多。

在此之前我最后一次使用托管 C++ 是在 2003 年左右。我记得这有点痛苦,而且工作不顺畅。

于 2009-04-01T07:31:47.893 回答