Смешивание ObjC и C ++ с шаблонными классами C ++ в нескольких источниках - PullRequest
0 голосов
/ 25 марта 2011

Я просто подумываю о переносе некоторых старых источников C ++, хранящихся в моем архиве, на iOS, предоставляя таким образом графический интерфейс ObjC, используя обертки для некоторых вещей C ++ и оставляя важные рабочие данные в коде C ++.Итак, проблема в том, что старые исходники исходят из Win32 MFC, таким образом, используя класс CString для строк, и я хочу заменить его на CStdString Джо О'Лири, который является шаблоном класса C ++, который будет делать это прекрасно ... но:

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

Будут ли у меня проблемы с созданием строк в разных источниках?Может ли возникнуть проблема передачи шаблонной строки из одного источника в другой?На самом деле я не знаю, генерирует ли компилятор код для шаблона только один или несколько раз, имея в виду тот факт, что для шаблона используется один и тот же тип создания экземпляров.

Можете ли вы пролить свет на это?

Спасибо ...

Ответы [ 2 ]

1 голос
/ 25 марта 2011

MFC и CString могут корректно работать только в ОС Windows, поэтому они не являются подходящими кандидатами для размещения каких-либо библиотек, которые потенциально могут использоваться платформой, отличной от Windows.

Я не знаком с классами CStdString Джо О'Лири, но я бы рекомендовал использовать std::string в максимально возможной степени и char* с "extern C" функциями экспорта и обертывания для использования вне земли C ++ в качестве Строка в стиле c легче совместима с другими языками, которые могут потребоваться для вызова в вашу библиотеку C ++.

Что касается шаблонов, то все варианты создаются во время компиляции, а затем, насколько я знаю, во время выполнения выбирается правильная реализация. Однако ваша проблема, скорее всего, будет в переводе с одного вида строки на другой, что может потребовать от вас создания некоторого промежуточного слоя или оболочки для перехода от типа строки одного языка к другому.

0 голосов
/ 26 марта 2011

Я согласен с CString, если вы остаетесь с std :: string или какой-либо другой многоплатформенной реализацией строки для C ++, у вас не возникнет никаких проблем (даже boost работает на iOS).Я интегрирую C ++ / Obj-C уже около двух лет, так что вы можете быть уверены, что сохранение классов моделей в C ++ (даже с сильно шаблонным кодом) не является проблемой.Я бы посоветовал вам делать то, что вы могли бы лучше всего делать с Obj-C в Obj-C, хотя ... (избегая быть разработчиком молотка :))

Удачи!

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