Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在C++/CLI中直接编译ISO C++代码吗?_.net_C++_C++ Cli_Portability - Fatal编程技术网

.net 在C++/CLI中直接编译ISO C++代码吗?

.net 在C++/CLI中直接编译ISO C++代码吗?,.net,c++,c++-cli,portability,.net,C++,C++ Cli,Portability,我想编写一些库代码,以便跨产品和跨平台(包括OSX和.Net)共享 我的研究表明,在C++中编写这个核心库代码是一个很好的方法。显然我也可以使用java,但这不是我的强项——我宁愿坚持Objc/C++/C++,我可以。 P>我相信C++ + CLI是C++在.NET中的当前选择,所以我的问题是:C++ + CLI是“香草”ISO C++的严格超集吗?换句话说,如果我编写C++代码,它可以在GCC下编译,例如,我可以在没有改变的情况下编译,或者在C++/CLI?条件下编译几个条件编译程序。 显然

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

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

<> P>我相信C++ + CLI是C++在.NET中的当前选择,所以我的问题是:C++ + CLI是“香草”ISO C++的严格超集吗?换句话说,如果我编写C++代码,它可以在GCC下编译,例如,我可以在没有改变的情况下编译,或者在C++/CLI?

条件下编译几个条件编译程序。
显然,我必须围绕系统函数、I/O等编写包装器-这很好-但我希望核心算法代码尽可能可移植。

如果您只使用C,那么您可以依靠Mono提供跨平台功能。另一种选择是提供C和本地的、可移植的C++版本。p> 如果您真的需要Windows以外的托管代码版本,我会使用Java。学习Java比C++/CLI有用得多,而从C移植到Java也不太可能是火箭科学

我会避免使用C++/CLI,除非您必须为某个富有/重要的客户这样做


实现的优先级应该取决于预期的市场需求。

如果您只使用C,那么您可以依靠Mono来提供跨平台功能。另一种选择是提供C和本地的、可移植的C++版本。p> 如果您真的需要Windows以外的托管代码版本,我会使用Java。学习Java比C++/CLI有用得多,而从C移植到Java也不太可能是火箭科学

我会避免使用C++/CLI,除非您必须为某个富有/重要的客户这样做

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

不,不会

根据MSDN文档,它将。但这是一个肮脏的谎言。我掉进了这个陷阱。当已经编写了数千个LOC时,结果发现CLI在boost::thread方面存在问题。后者根本不起作用。所以我想可能还有其他事情。所以不要去那里,这是我的好建议。 即使没有CLI,也不能假设使用gcc编译的所有内容都将使用MSVC编译,因为后者存在许多ISO遵从性问题。更糟糕的是,两者都可以编译,但运行方式不同。微软太差劲了。。。但他们的IDE非常出色: 不,不会的

根据MSDN文档,它将。但这是一个肮脏的谎言。我掉进了这个陷阱。当已经编写了数千个LOC时,结果发现CLI在boost::thread方面存在问题。后者根本不起作用。所以我想可能还有其他事情。所以不要去那里,这是我的好建议。 即使没有CLI,也不能假设使用gcc编译的所有内容都将使用MSVC编译,因为后者存在许多ISO遵从性问题。更糟糕的是,两者都可以编译,但运行方式不同。微软太差劲了。。。但他们的IDE非常出色:
在大多数情况下,但不一定。例如,与BCL相比,STL/CLR的速度非常慢,而像nullptr这样的东西指的是托管的nullptr,而不是本机的nullptr。即使你的应用程序为.NET进行了干净的编译,这也不是正确的做法


如果必须提供托管接口,则将本机端编译为DLL,然后从C进行p/Invoke将更加合理。这将更加可靠。

在大多数情况下,但不一定如此。例如,与BCL相比,STL/CLR的速度非常慢,而像nullptr这样的东西指的是托管的nullptr,而不是本机的nullptr。即使你的应用程序为.NET进行了干净的编译,这也不是正确的做法


如果必须提供托管接口,则将本机端编译为DLL,然后从C进行p/Invoke将更加合理。这将是更可靠的。

BTW,我把这个体系结构建立在这个问题的建议上——BTW,我把这个体系结构建立在这个问题的建议之上:Booo::线程不是香草ISO C++。它支持某些实现,但是如果C++ + CLI不是其中之一,它就不一定证明什么。编译器都有符合性问题。Boo::线程不是香草ISO C++。它支持某些实现,但如果C++/CLI不是其中之一,则不一定能证明任何东西。这两个编译器都存在法规遵从性问题。不幸的是,BCL的重要部分的体系结构比基础Win32 API糟糕得多。到目前为止,C++/CLI是将本机API引入.NET的最佳选择。java与本地API交互非常可怕,JNI远不如P/INVICE容易使用,更不用说C++互操作。问题是我想在Windows和COXA中使用WPF,不使用Swing。所以java不是我的选择。
遗憾的是,BCL中有相当一部分的架构比底层的Win32 API糟糕得多。到目前为止,C++/CLI是将本机API引入.NET的最佳选择。java与本地API交互是绝对可怕的,JNI远不如P/INVICE容易使用,更不用说C++ C++互操作。问题是我想在Windows和COXA中使用WPF,在OS X上。而不是Swing等等。所以java不是我的选择。我很害怕。STL/CLR不是ISO C++代码。在所有的情况下,ISO C++代码都与C++/CLI编译器进行编译,C++/CLI包装器比P/Unjk声明更容易编写和维护一个数量级,并提供更好的性能。谢谢您的回答。表现当然是很好的一点;我可以尝试通过PInvoke和C++ +CLI两个本地C++来比较速度。STL/CLR不是ISO C++代码。在所有的情况下,ISO C++代码都与C++/CLI编译器进行编译,C++/CLI包装器比P/Unjk声明更容易编写和维护一个数量级,并提供更好的性能。谢谢您的回答。表现当然是很好的一点;我可以尝试通过PInvoke和C++ +CLI两个本地C++来比较速度。