Рекомендуете ли вы переключить Native C++ на C++\CLI?[дубликат]

StackOverflow https://stackoverflow.com/questions/152436

  •  02-07-2019
  •  | 
  •  

Вопрос

Последние несколько лет я работаю программистом на C++.Сейчас мы начинаем новый проект с нуля.Итак, что вы думаете о переходе на C++\CLI за счет потери независимого от платформы кода?Есть ли какие-то особые преимущества, которые можно получить, перейдя на C++\CLI?

Это было полезно?

Решение

Основываясь на своем опыте работы с C++, C# и .NET, я бы рекомендовал следующее:

  • Если вы хотите пойти по пути .NET, используйте C#.
  • Если вам не нужен .NET, используйте традиционный C++.
  • Если вам нужно соединить традиционный C++ с кодом .NET, используйте C++/CLI.Работает как с вызовами .NET классов C++, так и с вызовами C++ классов .NET.

Я не вижу смысла просто переходить на C++/CLI, если вам это не нужно.

Другие советы

Некоторые вопросы, которые следует рассмотреть перед переключением:

[1] Устраивает ли вас использование Windows?Существуют клоны .NET для других ОС, но ваше приложение не будет работать прозрачно.Сложность, которая вам может не понадобиться.

[2] Рассматриваете ли вы возможность перехода только ради поддержки сборки мусора?Если да, то вы можете просто использовать некоторые библиотеки сборщика мусора C++.И если вы поймете, как использовать std::shared_ptr, вы, возможно, не почувствуете необходимости в сборщиках мусора.Накладные расходы, которые вам могут не понадобиться.

[3] Рассматриваете ли вы C++/CLI из-за возможности сборки мусора и всех полезных классов .NET, которые вы можете использовать?Если да, то почему бы просто не перейти на C#.C++/CLI — это переходная технология, и в такие вещи лучше не вкладывать ресурсы.C# становится довольно зрелым и пригодным для использования.

Лично я бы просто придерживался C++;).

Есть ли для вас какая-то польза?Скорее всего, вы потеряете возможность переключиться на другую ОС.

не беспокойтесь, если вы не интегрируетесь с приложениями .NET.Конечно, не используйте STL/CLR, поскольку его производительность действительно ужасна.

Соблазнительно переключиться на использование библиотек классов .NET, но есть альтернативы.Если вы сделаете это, вы не сможете так легко портировать свой код.

Также кажется, что популярность OSS растет, поэтому, возможно, сейчас самое время изучить возможность использования кроссплатформенных библиотек и инструментов.Развернуть приложение для Linux гораздо проще, чем для Windows (поставив полностью настроенную ОС!), и вы получите гораздо большую рентабельность инвестиций, если развернете клиенты для Linux (поскольку они бесплатны).

Если бы я был бизнесменом, я бы хотел иметь возможность развертывания хотя бы на Linux или Mac, а не только на Windows.Стратегически я бы не хотел держать пари, что мир останется с Microsoft через 5 лет.

Основное преимущество, которое вы получите при переходе на C++/CLI, — это доступ к библиотекам .NET и самой платформе (сборка мусора и т. д.).Однако, насколько я могу судить, основная причина существования C++/CLI заключается в том, чтобы облегчить перенос существующего кода C++ для запуска в среде .NET.В новых проектах рекомендуется использовать C#.

Если вам нужно использовать существующий код C++, смешанный с платформой .NET, то имеет смысл использовать C++/CLI, но в целом начинать следует с C#.

Если в .NET есть что-то, что необходимо широко использовать в новом проекте (возможно, более простой дизайн графического интерфейса или что-то в этом роде), используйте C#.если нет, то придерживайтесь собственного C++.Я не думаю, что вы ничего от этого потеряете.

Мне настолько не нравится C++/CLI, что я бы рекомендовал держаться подальше, как я описываю. здесь.Некоторые предлагают использовать C++/CLI в качестве моста между стандартным C++ и C#, но из-за особенностей конструкции C++/CLI использовать этот способ очень утомительно (приходится вручную создавать обертки обычного кода C++, которые можно вызывать из С#).Поэтому я бы рекомендовал СВИГ вместо этого для взаимодействия стандартного C++ с C# (хотя, по общему признанию, SWIG требует значительного обучения).

Взгляните на эти две статьи:

Критический обзор C++/CLI, часть I

Критический обзор C++/CLI, часть II

Я считаю, что к настоящему времени вы убеждены, как я, в том, что C ++/CLI не является ни «набором расширений на C ++» (во многих аспектах это на самом деле подмножество C ++), и не связано с C ++ больше, чем с любым другим языком с полуколонами и кудрявые брекеты.Кроме того, C ++/CLI, безусловно, ориентированный на окна язык программирования;Это определенно не язык, который будет с радостью запустить сервер Solaris 10 или мобильный телефон Nokia.Какое отношение это имеет к C ++?

Одним из основных недостатков использования C++/CLR является возможность потери вашего IP (интеллектуальной собственности), если код недостаточно скрыт.В целом я согласен с утверждениями, сделанными здесь другими участниками.Если вам нужен переносимый код, независимый от виртуальной машины MS.net, то вам подойдет собственный C/C++.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top