Обучение и кроссплатформенная разработка (C ++) - PullRequest
17 голосов
/ 13 октября 2009

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

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

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

Ответы [ 10 ]

16 голосов
/ 13 октября 2009

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

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

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

  2. Обернуть специфичные для платформы API-интерфейсы за абстракцией / изоляцией / служебным уровнем

  3. Выбор кроссплатформенных библиотек

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

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

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

13 голосов
/ 30 ноября 2012

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

Следует предоставить более подробную информацию к уже даным ответам.

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

GUI

  1. Qt
  2. XVT
  3. WxWidgets

Общие библиотеки / фреймворки

  1. STL (уже включено в большинство библиотек платформ)
  2. Повышение

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

  1. SDL
  2. Cocos2d-х
3 голосов
/ 13 октября 2009

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

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

2 голосов
/ 18 декабря 2009

использовать повышение. они позаботятся о кроссплатформенных вещах для вас.

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

2 голосов
/ 13 октября 2009

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

2 голосов
/ 13 октября 2009

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

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

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

2 голосов
/ 13 октября 2009

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

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

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

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

1 голос
/ 13 октября 2009

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

1 голос
/ 13 октября 2009

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

0 голосов
/ 18 декабря 2009

Вы можете попробовать использовать U ++> http://www.ultimatepp.org/index.html

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