Я был именно там, где вы есть.
Одна хитрость в том, что даже если у вас будут условия в коде, не включайте версии Symbian. Это затрудняет добавление поддержки новых версий в будущем или настройку для телефонов, которые в некотором роде необычны. Вместо этого определите, на какие фактические свойства вы полагаетесь, напишите код вокруг них, а затем включите заголовочный файл, который:
#if S60_3rd_ED
#define CAF_AGENT 1
#define HTTP_FILE_UPLOAD 1
#elif S60_2nd_ED
#define CAF_AGENT 0
#if S60_2nd_ED_FP2
#define HTTP_FILE_UPLOAD 1
#else
#define HTTP_FILE_UPLOAD 0
#endif
#endif
и так далее. Очевидно, что вы можете сгруппировать определения по функции, а не по версии, если хотите, иметь совершенно разные заголовки для конфигурации или любую подходящую вам схему.
У нас также есть определения для классов пользовательского интерфейса, от которых вы наследуете, поэтому между S60 и UIQ был некоторый общий код пользовательского интерфейса. Фактически из-за того, что это был за продукт, у нас не было большого количества кода, связанного с пользовательским интерфейсом, поэтому приличная его доля была обычной.
Однако, как говорят другие, еще лучше объединить поведение переменных в классы и функции, где это возможно, и связать разные версии.
[Изменить в ответ на комментарий:
Мы очень старались избегать каких-либо действий, зависящих от разрешения - к счастью, конкретное приложение не усложняло задачу, поэтому наш ограниченный пользовательский интерфейс был довольно универсальным. Главное, где мы включили разрешение экрана, были заставки / фоновые изображения и тому подобное. У нас был скрипт для предварительной обработки файлов сборки, который заменял ширину и высоту на имя файла, splash_240x320.bmp или что-то еще. На самом деле мы создавали изображения вручную, поскольку их было не так много, а изображения менялись не часто. Тот же сценарий сгенерировал файл .h, содержащий #defines большинства значений, используемых при создании файла сборки.
Это для сборок на устройство: у нас также были более общие файлы SIS, которые просто меняли размеры на лету, но у нас часто были требования к установленному размеру (иногда ПЗУ было довольно ограниченным, что имеет значение, если ваше приложение является частью Базовое изображение устройства), и изменение размера изображений было одним из способов немного уменьшить его. Для поддержки поворота экрана на N92, Z8 и т. Д. Нам по-прежнему требовались портретная и альбомная версии некоторых изображений, поскольку изменение соотношения сторон не дает столь же хороших результатов, как изменение размера до того же или аналогичного соотношения ...]