ISO C ++代码是否可以直接在C ++ / CLI中编译?

时间:2010-11-17 16:21:31

标签: .net c++ c++-cli portability

我想编写一些库代码,以便跨产品和跨平台共享,包括OS X和.Net。

我目前的研究表明,用C ++编写这个核心库代码是一种很好的方法。显然我也可以使用Java,但这不是我的强项 - 我宁愿坚持使用ObjC / C ++ / C#。

我相信C ++ / CLI是.Net中C ++的当前选择,所以我的问题是; C ++ / CLI是'vanilla'ISO C ++的严格超集吗?换句话说,如果我编写在gcc下编译的C ++代码,我可以在C ++ / CLI下编译而无需更改(或使用一些条件编译)吗?

显然我将不得不围绕系统函数,I / O等编写包装器 - 这很好 - 但我希望核心算法代码尽可能便携。

3 个答案:

答案 0 :(得分:4)

在大多数情况下,但不一定。例如,与BCL相比,STL / CLR非常慢,而像nullptr这样的东西是指托管的nullptr,而不是本机的nullptr。即使您的应用程序干净地编译为.NET,也不能使它成为正确的事情。

如果必须提供托管接口,将本机端编译为DLL然后从C#调用P / Invoke会更合理。这将更加可靠。

答案 1 :(得分:1)

如果您只是使用C#,那么您可以依靠Mono提供跨平台功能。另一种方法是提供C#和本机可移植C ++版本。

如果您真的需要Windows以外的托管代码版本,我会使用Java。学习Java比C ++ / CLI更有用,从C#移植到Java不太可能是火箭科学。

除非你绝对必须为一些富有/重要的客户做这件事,否则我会避免使用C ++ / CLI。

实施的优先顺序应取决于预期的市场需求。

答案 2 :(得分:1)

不会

  • 根据MSDN文档,它会。但这是一个令人讨厌的谎言。我陷入了这个陷阱。当已经编写了数千个LOC时,结果发现CLI存在boost :: thread问题。后者只是不起作用。所以我认为可能还有其他的事情。所以,不要去那里,这是我的好建议。
  • 即使没有CLI,您也不能假设使用gcc编译的所有内容都将使用MSVC进行编译,因为后者存在许多ISO合规性问题。更糟糕的是,两者都可以编译但运行方式不同微软糟透了......但他们的IDE非常棒:)