OS X Lion C ++ 11, Boost и другие вопросы - PullRequest
2 голосов
/ 27 февраля 2012

Я опытный разработчик для Mac / iOS, но я изначально начал программировать на C ++.Я не касался C ++ в течение многих лет, и теперь пришло время сделать это, потому что я хочу иметь многоплатформенную поддержку для нового типа файлов, которые я пытаюсь создать.

C ++ развился надгоды, к тому, что я нахожу, это очень раздутый беспорядок сторонних библиотек и усилия комитета по стандартам C ++ по контролю над развитием языка.Отсюда и мои вопросы.

Я хочу иметь в своем распоряжении как можно больше передовых инструментов и в то же время соответствовать стандартам, насколько это возможно.Моя основная платформа разработки - OS X Lion, и у меня есть доступ к установке Fedora 16.Я хочу использовать Lion и более поздние версии, Windows XP и более поздние версии и новейшие ядра Linux, поэтому обратная совместимость здесь не является проблемой.

Один из вариантов - установить библиотеки Boost на мою машину, но, как я уже давно видел, это очень болезненный процесс, с ошибками во время компиляции и причудами, которые приходится делать в OS XЯ не знаю, будет ли этот опыт таким же, если я попробую это сейчас.Другой выбор - придерживаться TR1, который Lion предлагает в настоящее время.Тем не менее, TR1 не является стандартом, насколько я понимаю, это де-факто популярная реализация того, что было запланировано сделать в C ++ 11.Таким образом, я теряю множество расширенных функций, которые предлагает Boost.

С этими двумя опциями, какой рекомендуемый способ использовать расширенные функции C ++ в вашем распоряжении и максимально соответствовать стандартам?Если это Boost, рекомендуется ли скомпилировать Boost как статические библиотеки, чтобы избежать установки Boost на компьютерах конечных пользователей?

Какова текущая поддержка функций Xcode 4.3 для C ++ 11?

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

Спасибо.

Ответы [ 2 ]

1 голос
/ 27 февраля 2012

Прежде всего, в Boost есть две совершенно разные части:

  • те, которые только для заголовка
  • те, которые требуют скомпилированные библиотеки

Если вы придерживаетесь только заголовка, это определенно будет намного проще. Обратите внимание, что некоторые библиотеки, такие как Asio, имеют два режима компиляции (только заголовок и библиотека). Однако для ряда полезных библиотек, таких как boost::regex, требуется скомпилированная библиотека.

Во-вторых, поддержка C ++ 11 движется быстро. GCC 4.7 и грядущий Clang 3.1 поддерживают все основные функции Стандарта, кроме атомарных (дискуссии по лучшим стратегиям реализации все еще продолжаются), поэтому в Linux и Mac дела обстоят отлично ... однако Visual Studio отстает, и Microsoft на самом деле не заинтересована в быстром продвижении, поэтому поддержка Windows по-прежнему минимальна (и рекламируемые поддерживаемые функции основаны на более старых версиях стандарта и не на 100% совместимы с последней версией). Это не означает, что вы не можете скомпилировать для Windows, просто вы должны использовать Mingw или аналогичный и таким образом отказаться от взаимодействия с существующими библиотеками Windows.

На основании этих двух наблюдений я бы порекомендовал:

  • попробуйте пока избегать C ++ 11, если вы хотите взаимодействовать с Windows DLL, в противном случае я бы порекомендовал Clang (для его интеграции в XCode)
  • старайтесь избегать Boost библиотек и придерживайтесь частей только для заголовка (все еще много хорошего)
  • если вам нужны библиотеки , вы можете использовать DLL, если вы распространяете их вместе с исполняемым файлом или используете систему пакетов или что-то еще, но это представляет большую трудность (для установки), чем просто статический ссылки.
1 голос
/ 27 февраля 2012

Обратите внимание, я не разработчик Mac, но я бы предпочел Boost.Многие стандарты C ++ 11 взяты из него, и вы можете ожидать, что дополнительные функции Boost будут перенесены в стандарты C ++.

И как энтузиаст Qt: взгляните на QtCore.Это очень мощный и кроссплатформенный.

...