Какой смысл в C ++ / CLI? - PullRequest
       1

Какой смысл в C ++ / CLI?

4 голосов
/ 10 марта 2010

Мне интересно, что такое использование C ++ / CLI. Мне кажется, что это в основном C ++ работает на .Net, я ошибаюсь в этом мышлении? Для чего это? Почему бы просто не использовать C # или другой действительно управляемый язык?

Ответы [ 4 ]

11 голосов
/ 10 марта 2010

Вот несколько преимуществ C ++ / CLI перед простым C ++ или, скажем, C #

  • Это отличный язык для написания большого компонента, который взаимодействует между нативным и управляемым кодом.
  • Обеспечивает быстрый (er) путь преобразования из чисто собственной базы кода C ++ в исключительно управляемую. Без C ++ / CLI лучшим вариантом будет перезапись
10 голосов
/ 10 марта 2010

C ++ / CLI имеет несколько интересных вещей, которых нет в C #:

  • Бокс строго типизированный. Если вы добавите int к object в C #, вы потеряете любую информацию о том, какой был исходный тип. Не так в C ++ / CLI.

  • Различие между деструкторами и финализаторами. В C # вы должны вручную реализовать IDisposable и не забывать вызывать Dispose. В C ++ / CLI вы просто помещаете код очистки в деструктор (который автоматически компилируется в метод Dispose) и помещаете код очистки только для управляемого управления в финализатор.

  • Различие между семантикой стека и кучи для переменных. Стек используется по умолчанию, и выделенные в стеке ссылочные типы будут автоматически уничтожаться (уничтожаться) - вам не нужно помнить delete их, просто отпустите их за пределы области видимости. Короче говоря, с неуправляемыми ресурсами в C ++ / CLI гораздо проще работать, чем с любым другим языком .NET.

  • Функциональные указатели. В настоящее время это не является чем-то особенным с анонимными делегатами и лямбда-синтаксисом в C #, но в 2005 году это было своего рода большое дело.

  • Доступ к всем модификаторам доступа, реализованным в CLR. Вы можете явно указать открытые, защищенные или закрытые для обеих сборок и для внешних сборок. Все, что у вас есть в C # (кроме очевидных public, protected, private), это модификаторы internal и protected internal, первый из которых означает «публично внутри, приватно снаружи», а второй - «публично внутри» защищенный извне ". В C ++ вы можете создать класс «protected AND internal», что означает, что член доступен только для производных классов в той же сборке.

  • Значения классов. Странно, но, вероятно, кому-то полезно!

Более подробное объяснение всего этого и более подробное здесь . Короче говоря, другие управляемые языки - C #, VB.NET, F # и т. Д. - на самом деле не дают вам полного доступа ко всему, что может делать CLR, более 90%. C ++ / CLI позволяет вам делать практически все, что вы хотите, из спецификации CLR.

4 голосов
/ 10 марта 2010

Несколько причин для C ++ / CLI:

  • это позволяет интегрировать / смешивать управляемый и неуправляемый код на более тонком уровне, чем другие языки .NET
  • Управляемый C ++ не был особенно успешным; C ++ / CLI был попыткой улучшить соответствие парадигмы .NET существующим идиомам C ++
  • Хотя я не думаю, что кто-то думал, что он обгонит C # по популярности, я думаю, что были люди, которые думали, что он будет иметь более высокий уровень успеха, чем сейчас. Опять же, насколько я знаю, это очень успешно. Я ничего с этим не делал, кроме игрушек - но когда Блог команды Visual C ++ указал, что VS2010 не будет иметь IntelliSense для C ++ / CLI , случился небольшой пожар отталкивания. Гораздо больше, чем я ожидал (я не уверен, что ожидал MS).

Microsoft сделала некоторые вещи в C ++ / CLI, которые, на мой взгляд, интересны, даже если у вас нет интереса к .NET: способ, которым они обрабатывали добавление новых ключевых слов таким образом, который бы меньше всего влиял на существующий C ++

  • многословных (или «разделенных») ключевых слов (я думаю, что этот метод запатентован или находится на рассмотрении в Microsoft)
  • контекстные ключевые слова
  • ключевые слова 'namespaced'

Подробнее см. статью Саттера .

2 голосов
/ 21 апреля 2010

Черт возьми, я использовал загрузки C ++ / CLI, когда вам нужно что-то сделать с высокой производительностью (например, обработка изображений с SIMD), взаимодействовать с собственным C ++ (например, кодом OpenGL, существующим устаревшим кодом C ++) или просто выглядеть умным.

ок;) Возможно, не последний

Отказ от поддержки будет большой потерей ИМО.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...