您是否建议将Native C ++转换为C ++ \ CLI转换?

时间:2008-09-30 09:55:16

标签: c# c++ c++-cli

过去几年我一直是一名本地C ++程序员。现在我们从头开始一个新项目。那么您对以C ++ \ CLI转移而牺牲平台无关代码的想法是什么?通过转换到C ++ \ CLI可以获得任何特殊优势吗?

8 个答案:

答案 0 :(得分:31)

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

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

如果你不需要它,我认为没有意义去C ++ / CLI。

答案 1 :(得分:6)

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

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

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

除非您正在使用.NET应用程序进行集成,否则不要打扰。当然不要使用STL / CLR,因为它的性能非常糟糕。

很容易将该开关转换为使用.NET类库,但还有其他选择。如果这样做,您将无法轻松移植代码。

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

如果我是一名商人,我希望至少能够在Linux或Mac上部署,而不仅仅是Windows。从战略上讲,我不想打赌这个世界在5年后一直与微软保持联系。

答案 4 :(得分:2)

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

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

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

答案 5 :(得分:1)

我不喜欢C ++ / CLI,所以我建议转向清晰,正如我所描述的here。有人建议使用C ++ / CLI作为标准C ++和C#之间的桥梁,但是由于C ++ / CLI的设计方式,使用这种方式非常繁琐(您必须手动创建可以从中调用的普通C ++代码的包装器) C#)。因此,我建议使用SWIG来代替标准C ++与C#的接口(尽管如此,SWIG有一个实质性的学习曲线)。

答案 6 :(得分:1)

看看这两篇文章:

A Critical Overview of C++/CLI, Part I

A Critical Overview of C++/CLI, Part II

  

我相信你到现在为止   我确信C ++ / CLI是   既不是“C ++的一组扩展”   (在很多方面,它实际上是一个   C ++的子集),也与它无关   C ++比任何其他语言都多   分号和花括号。   此外,C ++ / CLI绝对是一个   面向Windows的编程语言;   它绝对不是一种语言   Solaris 10服务器或诺基亚移动   手机很乐意跑。是什么   它与C ++有什么关系?

答案 7 :(得分:0)

使用C ++ / CLR的一个主要缺点是,如果代码没有被严重遮挡,则可能会丢失您的IP(知识产权)。总的来说,我同意其他成员在这里所作的发言。如果您想要与MS .net vm无关的可移植代码,那么本机C / C ++就是您的选择。