Подтвердить что ты не робот

Обучение и кросс-платформенная разработка (С++)

Я пишу небольшую программу на С++ для удовольствия и для расширения моего навыка С++. Поскольку его объем относительно невелик, я также планирую попробовать кросс-платформенную разработку, сделав эту программу поддержкой как Windows, так и Linux.

Я считаю, что мое знание С++ сидит где-то между обычным и промежуточным уровнем: OO, немного шаблонов и шаблонов дизайна, раньше использовалось STL и пыталось изучить его более подробно... Однако, кодируя эту небольшую программу, Я нахожу, что чем глубже я копаюсь на С++, тем больше я испытываю боль, особенно когда я прихожу к пониманию и разбираюсь в различиях между реализацией различных платформ/поставщиков.

Использование кросс-платформенных фреймворков, таких как Qt, ACE, Boost, похоже, помогает ускорить процесс разработки, тем самым облегчая жизнь, но я волнуюсь, если это превзойдет мою цель. Может ли кто-нибудь дать совет, если есть какая-нибудь "лучшая практика" для кросс-платформенной разработки С++? Спасибо.

4b9b3361

Ответ 1

Может кто-нибудь дать совет, если есть какая-нибудь "лучшая практика" для кросс-платформенной разработки С++?

Есть три вещи:

  • Напишите свой собственный код, чтобы он переносился

  • Оберните API-интерфейсы, специфичные для платформы, за слоем абстракции/изоляции/полезности

  • Выбор межплатформенных библиотек

Вы можете выбрать вариант № 2 и/или # 3.

Преимущества # 3 над # 2, как правило, такие вещи, как "Это уже написано, отлажено и поддерживается"; и недостатки подобны: "Я должен это изучить, мне, возможно, придется заплатить за это, я не могу самостоятельно поддерживать его, и это может не делать именно то, что я хочу".

Разработчики часто предпочтут вариант № 3 вместо # 2, особенно если это бесплатный открытый исходный код (который все три из библиотек, которые вы указали).

Ответ 2

http://blog.backblaze.com/2008/12/15/10-rules-for-how-to-write-cross-platform-code/

Должно предоставить более подробные ответы на уже предоставленные ответы.

Также я предлагаю использовать существующие библиотеки, которые абстрагируют сущность, размеры и различия типов данных. Перед запуском вашего кросс-платформенного проекта следует рассмотреть следующее.

GUI

Общие библиотеки/рамки

Разработка игр

Ответ 3

Использовать gcc. Он доступен как для Windows, так и для Linux, а библиотеки и языковой синтаксис идентичны на обеих платформах.

Для кросс-платформенных графических приложений Qt - хорошая идея. Если вы пытаетесь достичь независимости от платформы, не обойтись без зависимости от структуры графического интерфейса.

Ответ 4

Если вы не используете графический интерфейс, кросс-платформа не является большой проблемой.

Есть несколько небольших проблем с файловыми системами (разные/\ separators, допустимые символы в именах файлов и т.д.), но они находятся на уровне приложения, а не на С++.

Выполнение крупных приложений становится более сложным, вам нужно обрабатывать справку, размещать файлы, возможно, информацию о безопасности и пользователе на кросс-платформенном пути. Для простого программирования типов алгоритмов проблем нет.

Qt - это, в основном, графическая библиотека, хотя в ней есть дополнительные файлы файловой системы с перекрестной платформой. STL, Boost, ACE являются кросс-платформенными, но это не главное.

Ответ 5

Используйте их! Шутки в сторону. Единственная причина, по которой вы не можете их использовать, - это планировать работу в среде, где они недоступны. Но, учитывая их кросс-платформенный характер, это вряд ли.

Вы обнаружите, что польза, которую вы получаете от их использования, огромна, даже если они не являются кросс-платформенными. "Лучшая практика", о которой вы говорите, состоит в том, чтобы максимально быстро и легко доставить ваш "продукт" как можно короче.

Однажды я ответил на вопрос от кого-то, кто заявил, что не хочет использовать библиотеки GUI на уровне выше Xlib. Если бы он когда-либо использовал Xlib, он бы знал, какую боль мы испытывали при принуждении к кодированию при таком низком уровне абстракции. Это примерно так же важно, как и желание кода на ассемблере, потому что C/С++? Python/Perl/everthting-else - это просто абстракция более высокого уровня.

Ответ 6

эти ответы действительно хороши, и вы можете составить список для поиска, где есть начало. но я думаю, что вы должны прочитать некоторые статьи о "переносе приложений". Не имеет значения для кросс-платформенной разработки, но это может дать вам очень большую перспективу относительно кросс-платформенной разработки. В кросс-платформенной разработке одним из наиболее важных факторов является проблема с памятью, такая как "endian" (порядок байтов байтов может показывать различия для технологий или платформ).

Ответ 7

использовать boost. они заботятся о кросс-платформенном материале для вас.

boost:: filesystem - отличный пример

Ответ 8

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

Ответ 9

Если вы действительно заинтересованы в том, чтобы сделать ваш код как можно более кросс-платформенным, используйте как можно больше компиляторов. Если вы используете Windows и Linux, используйте VC и gcc, как минимум. Это гарантирует, что вы не будете использовать специальные функции, и что вы не полагаетесь на поведение системы. Используйте больше компиляторов (Intel, IBM и т.д.) И ОС (OS X, Solaris), если у вас есть к ним доступ.