我在過去的幾年中一直是一名本地C++程序員。現在我們從頭開始一個新項目。那麼,如何轉向使用C++ \ CLI的想法是以犧牲平臺獨立代碼爲代價的。通過轉向C++ \ CLI可以獲得什麼特別的優勢嗎?您是否推薦將Native C++轉換爲C++ CLI?
回答
我建議以下,根據我使用C++,C#和.NET體驗:
- 如果你想要去的.NET的方式,使用C#。
- 如果您不想使用.NET,請使用傳統的C++。
- 如果您必須將傳統C++與.NET代碼連接起來,請使用C++/CLI。與.NET調用C++類和調用.NET類的C++一起使用。
如果你不需要它,我認爲只要去C++/CLI是沒有意義的。
你有什麼好處嗎?您可能會失去切換到另一個操作系統的能力。
除非您與.NET應用程序集成,否則不要打擾。當然,不要使用STL/CLR,因爲它的性能確實很糟糕。
它傾向於將該開關翻轉爲使用.NET類庫,但也有其他選擇。如果你這樣做,你將無法輕鬆移植你的代碼。
它似乎也是OSS的崛起正在增加,所以現在可能是使用跨平臺庫和工具進行調查的時候了。您可以比Windows更輕鬆地部署Linux應用程序(通過發佈完全配置的操作系統!),並且如果您部署Linux客戶端(因爲它們是免費的),您將獲得更好的ROI。
如果我是一個商人,我會希望至少有能力部署在Linux或Mac上,而不僅僅是windows-only。從戰略上講,我不想打賭5年後這個世界與微軟保持着同樣的關係。
一些問題交換之前,需要考慮:
[1]你罰款堅持到Windows?有其他操作系統的.NET克隆,但你的應用程序不會運行透明。您可能不需要的複雜性。
[2]您是否正在考慮僅針對垃圾回收支持進行切換?如果是這樣,你可以使用一些C++垃圾收集器庫。如果你弄清楚如何利用std :: shared_ptr,你可能不會覺得需要垃圾收集器。您可能不需要的開銷。
[3]您是否正在考慮C++/CLI,因爲垃圾回收&所有有用的.NET類都可以利用?如果是這樣,爲什麼不切換到C#。 C++/CLI是一種過渡技術,最好不要在這些方面投入資源。 C#正變得非常成熟和可用。個人而言,我只會堅持使用C++;)。
您將轉移到C++/CLI的主要優點是訪問.NET庫和框架本身(垃圾回收等)。但是,據我所知,C++/CLI存在的主要原因是爲了簡化將現有C++代碼移植到.NET框架中的運行。鼓勵新項目使用C#。
如果您需要使用與.NET框架混合的現有C++代碼,那麼使用C++/CLI是有意義的,但一般而言,您應該從C#開始。
如果在.NET中有新的項目需要廣泛使用(也許更簡單的GUI設計或其他),然後使用C#。如果沒有,那麼堅持使用本機C++。我不認爲你會因此而失去任何東西。
那些兩篇文章請看:
A Critical Overview of C++/CLI, Part I
A Critical Overview of C++/CLI, Part II
我相信,現在你是 相信,因爲我是C++/CLI是 既不是「成立的C++擴展「 (在許多方面它實際上是C++的子集),也沒有涉及到比其他任何其他C++更多的C++語言 分號和大括號。此外,C++/CLI絕對是面向Windows的編程語言; 這絕對不是一種語言,即一個 Solaris 10服務器或諾基亞手機 將很樂意運行。 它與C++有什麼關係?
使用C++/CLR的一個主要缺點是如果代碼沒有被模糊不清地丟失IP(知識產權)的可能性。總的來說,我同意其他成員在這裏的發言。如果你想要獨立於MS .net虛擬機的可移植代碼,那麼原生C/C++就是最好的選擇。
- 1. 將C++/CLI轉換爲C#
- 2. 將SYSTEMTIME(Native C++)轉換爲DateTime(C#)
- 3. 將shell腳本轉換爲Objective-C CLI
- 4. 是否有任何工具可以將託管C++轉換爲C++/CLI?
- 5. 是否可以將VBA轉換爲C#?
- 6. C++/CLI將非託管本機C++列表轉換爲託管C++/CLI列表
- 7. 將C++/CLI轉換爲C++時的缺陷
- 8. 將一些C#代碼轉換爲託管或C++/CLI代碼
- 9. 將舊的Managed-C++項目轉換爲新的C++/CLI
- 10. 將c#中的字符串^轉換爲C++/CLI中的CString
- 11. 將C#正則表達式轉換爲C++/CLI?
- 12. C++/CLI字符串轉換
- 13. Bridj是否推薦OpenCV?
- 14. 將c#RSACryptoServiceProvider轉換爲C++
- 15. 將QT/C++轉換爲C#
- 16. 將C++轉換爲objective-c
- 17. 您會推薦哪種CPAN模塊將HTML轉換爲純文本格式?
- 18. C/C++ - 它是推薦使用量靜態或者將#define
- 19. 將整個C#項目轉換爲C++
- 20. 將c轉換爲php
- 21. C++/cli檢查數值是否爲
- 22. C#將C#6.0轉換爲C#4.0
- 23. 在C++/CLI中進行安全轉換 - 相當於C#的「as」?
- 24. 什麼是推薦的Bcrypt C實現?
- 25. C++/CLI轉換系統::字符串轉換爲const char *
- 26. 將cli curl轉換爲php
- 27. 將HWND轉換爲IntPtr(CLI)
- 28. 將C#short []轉換爲對象[]
- 29. 如何從C#ref類型轉換爲CLI \ C++ ^%type
- 30. 爲什麼我應該使用C++ Native的C++/CLI類型instad?
查看Bjarne Stroustrup在C++/CLI上的簡短常見問題解答。雖然他不喜歡這一點並不奇怪,但他不這樣做的原因相當明顯。 http://www2.research.att.com/~bs/bs_faq.html#CppCLI – 2010-01-13 16:19:37
@Chinmay:你爲什麼沒有發佈這個答案?我渴望upvote! – 2010-01-21 15:52:03