Обучение и кросс-платформенная разработка (С++)
Я пишу небольшую программу на С++ для удовольствия и для расширения моего навыка С++. Поскольку его объем относительно невелик, я также планирую попробовать кросс-платформенную разработку, сделав эту программу поддержкой как Windows, так и Linux.
Я считаю, что мое знание С++ сидит где-то между обычным и промежуточным уровнем: OO, немного шаблонов и шаблонов дизайна, раньше использовалось STL и пыталось изучить его более подробно... Однако, кодируя эту небольшую программу, Я нахожу, что чем глубже я копаюсь на С++, тем больше я испытываю боль, особенно когда я прихожу к пониманию и разбираюсь в различиях между реализацией различных платформ/поставщиков.
Использование кросс-платформенных фреймворков, таких как Qt, ACE, Boost, похоже, помогает ускорить процесс разработки, тем самым облегчая жизнь, но я волнуюсь, если это превзойдет мою цель. Может ли кто-нибудь дать совет, если есть какая-нибудь "лучшая практика" для кросс-платформенной разработки С++? Спасибо.
Ответы
Ответ 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), если у вас есть к ним доступ.
Ответ 10
Вы можете попробовать использовать U ++ > http://www.ultimatepp.org/index.html