这个问题在这里已经有答案了:

过去几年我一直是一名本地 C++ 程序员。现在我们正在从头开始一个新项目。那么,您对以失去平台无关代码为代价转向 C++\CLI 有何看法?通过转向 C++\CLI 可以获得什么特殊优势吗?

有帮助吗?

解决方案

根据我在 C++、C# 和 .NET 方面的经验,我会推荐以下内容:

  • 如果您想采用 .NET 方式,请使用 C#。
  • 如果您不需要 .NET,请使用传统的 C++。
  • 如果必须将传统 C++ 与 .NET 代码连接起来,请使用 C++/CLI。适用于 .NET 调用 C++ 类和 C++ 调用 .NET 类。

如果不需要的话,我认为直接使用 C++/CLI 是没有意义的。

其他提示

切换之前需要考虑的一些问题:

[1] 您可以继续使用 Windows 吗?有适用于其他操作系统的 .NET 克隆,但您的应用程序不会透明地运行。您可能不需要的复杂性。

[2] 您是否正在考虑仅仅为了垃圾收集支持而进行切换?如果是这样,您可以使用一些 C++ 垃圾收集器库。如果您弄清楚如何利用 std::shared_ptr,您可能不会觉得需要垃圾收集器。您可能不需要的开销。

[3] 您是否因为垃圾收集和可以利用的所有有用的 .NET 类而考虑使用 C++/CLI?如果是这样,为什么不直接切换到 c#。C++/CLI是一种过渡性的技术,最好不要把资源投入到这样的事情上。c# 正在变得相当成熟和可用。

就我个人而言,我会坚持使用 C++ ;)。

对你有什么好处吗?您可能会失去切换到另一个操作系统的能力。

除非您要与 .NET 应用程序集成,否则不必担心。当然不要使用STL/CLR,因为它的性能确实很糟糕。

人们很想切换到使用 .NET 类库,但还有其他选择。如果这样做,您将无法如此轻松地移植代码。

OSS 的兴起似乎也在增加,因此现在可能是研究使用跨平台库和工具的时候了。您可以比 Windows 应用程序更轻松地部署 Linux 应用程序(通过提供完全配置的操作系统!),并且如果您部署 Linux 客户端(因为它们是免费的),您将获得更好的投资回报率。

如果我是一名商人,我会希望至少能够在 Linux 或 Mac 上部署,而不仅仅是 Windows。从战略上讲,我不想打赌五年后世界会继续支持微软。

转向 C++/CLI 的主要优势是可以访问 .NET 库和框架本身(垃圾收集等)。然而,据我所知,C++/CLI 存在的主要原因是为了简化现有 C++ 代码的移植以在 .NET 框架中运行。鼓励新项目使用 C#。

如果您需要将现有的 C++ 代码与 .NET 框架混合使用,那么使用 C++/CLI 是有意义的,但通常您应该从 C# 开始。

如果新项目需要广泛使用 .NET 中的某些内容(可能是更简单的 GUI 设计或其他内容),则使用 C#。如果没有,那就坚持使用原生 C++。我认为这样做不会让你失去任何东西。

我非常不喜欢 C++/CLI,因此我建议明确转向,正如我所描述的 这里. 。有些人建议使用 C++/CLI 作为标准 C++ 和 C# 之间的桥梁,但由于 C++/CLI 的设计方式,使用这种方式非常繁琐(您必须手动创建普通 C++ 代码的包装器,可以从C#)。因此,我会推荐 斯威格 相反,用于将标准 C++ 与 C# 连接起来(尽管不可否认,SWIG 有相当长的学习曲线)。

看看这两篇文章:

C++/CLI 重要概述,第 I 部分

C++/CLI 重要概述,第二部分

我相信你们现在 我坚信 C /CLI 是 既不是 "C 的扩展集" (在许多方面,它实际上是一个 C 的子集),也与 与其他语言相比,C 的 分号和大括号。此外,C /CLI 绝对是一种 面向 Windows 的编程语言这绝对不是一种 Solaris 10 服务器或诺基亚手机 手机将很乐意运行。什么是 它与 C 有什么关系?

使用 C++/CLR 的一个主要缺点是,如果代码没有被充分隐藏,则可能会丢失您的 IP(知识产权)。总的来说,我同意这里其他成员的发言。如果您想要独立于 MS .net 虚拟机的可移植代码,那么本机 C/C++ 是最佳选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top