Подводные камни при преобразовании C ++ / CLI в C ++ - PullRequest
0 голосов
/ 22 марта 2010

У меня есть библиотека, написанная на C ++ / CLI, и я хочу ее открыть.Я хочу, чтобы он был как можно более кроссплатформенным и мог писать привязки к нему для использования другими языками (Java, Python и т. Д.).Для этого библиотека должна быть в простом C ++ для максимальной гибкости.Я полагаю, что логические структуры уже существуют, мне просто нужно заменить используемые им библиотеки .NET стандартными библиотеками C ++.Это ошибочное представление?На что следует обращать внимание при переходе?

Ответы [ 2 ]

3 голосов
/ 22 марта 2010

Это может быть больше проблем, чем стоит.Вот что вы можете встретить:

  • В C ++ нет сборки мусора.Это большой.Это может потребовать значительного редизайна вашей библиотеки только для конвертации.Если вы используете хотя бы C ++ tr1 или библиотеку наддува, вы можете сделать это, используя shared_ptr, но есть важные фундаментальные различия.Например, вы должны быть осторожны с круговыми зависимостями.Кроме того, они затрудняют отладку без специальной поддержки их в отладчике.
  • Функции в классах .Net, которые не имеют эквивалента в C ++ stl или стандартной библиотеке.Вероятно, самым большим препятствием будет любой написанный вами код манипуляции со строками, поскольку в нем много различий.
  • Библиотеки / сборки классов не встроены в C ++ - каждая платформа имеет свой собственный метод создания динамического или общегобиблиотеки, и нет большой поддержки общих библиотек C ++ - во многих случаях только библиотеки C.Будьте готовы сделать все статической библиотекой.
  • Вы должны сами управлять всеми своими ресурсами.
2 голосов
/ 22 марта 2010

Никогда не делал порт C ++ / Cli на C ++, но мне приходит в голову:

  • Убедитесь, что у вас нет утечек памяти.Если возможно, используйте smart-указатели вместо gcnew (если нет, убедитесь, что ваш код, тем не менее, безопасен для исключений).
  • Убедитесь, что интерфейс вашей библиотеки состоит только из встроенных типов (встроенные не включают типы STL!однако это не обязательно, если вы идете с открытым исходным кодом)
...