代码之家  ›  专栏  ›  技术社区  ›  Mark Pim

在C++/CLI中直接编译ISO C++代码吗?[副本]

  •  1
  • Mark Pim  · 技术社区  · 14 年前

    这个问题已经有了答案:

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

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

    我相信C++/CLI是C++在.NET中的当前选择,所以我的问题是:C++/CLI是“香草”ISO C++的严格超集吗?换句话说,如果我编写C++代码 gcc 例如,我可以在C++/CLI下编译而不改变(或使用一些条件编译)吗?

    显然,我必须围绕系统函数、I/O等编写包装纸。-这很好。-但我希望核心算法代码尽可能地可移植。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Puppy    14 年前

    在大多数情况下,但不一定。例如,与bcl相比,stl/clr的速度非常慢,一些东西(比如nullptr)指的是托管nullptr,而不是本机nullptr。即使你的应用程序完全为.NET编译,这也不能使它成为正确的事情。

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

        2
  •  1
  •   Steve Townsend    14 年前

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

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

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

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

        3
  •  1
  •   Armen Tsirunyan    14 年前

    不,不会的

    • 根据msdn文档,它将。但这是一个令人讨厌的谎言。我掉进了这个陷阱。当已经编写了数千个loc时,发现cli在boost::thread方面有问题。后者就是不起作用。所以我想可能还有其他的事情。所以不要去那里,这是我的好建议。
    • 即使没有cli,也不能假定使用gcc编译的所有内容都将使用msvc编译,因为后者存在许多ISO遵从性问题。更糟糕的是,两者都可以编译,但运行方式不同。微软太差劲了…但他们的IDE非常棒:)