我想编写一些库代码,以便跨产品和跨平台共享,包括OS X和.Net。
我目前的研究表明,用C ++编写这个核心库代码是一种很好的方法。显然我也可以使用Java,但这不是我的强项 - 我宁愿坚持使用ObjC / C ++ / C#。
我相信C ++ / CLI是.Net中C ++的当前选择,所以我的问题是; C ++ / CLI是'vanilla'ISO C ++的严格超集吗?换句话说,如果我编写在gcc
下编译的C ++代码,我可以在C ++ / CLI下编译而无需更改(或使用一些条件编译)吗?
显然我将不得不围绕系统函数,I / O等编写包装器 - 这很好 - 但我希望核心算法代码尽可能便携。
答案 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)
不会