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

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

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

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

13.10.2009 04:31:33
10 ОТВЕТОВ
РЕШЕНИЕ

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

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

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

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

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

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

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

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

16
13.10.2009 04:58:49

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

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

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

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

2
13.10.2009 04:38:45

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

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

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

2
13.10.2009 04:38:58

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

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

3
13.10.2009 04:39:37

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

1
13.10.2009 07:20:57

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

1
13.10.2009 11:26:34

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

2
13.10.2009 12:14:53

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

0
18.12.2009 04:12:17

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

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

2
18.12.2009 04:14:13

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

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

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

графический интерфейс пользователя

  1. Qt
  2. XVT
  3. WxWidgets

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

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

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

  1. SDL
  2. Cocos2d-х
15
30.11.2012 17:05:26