Вы не можете записать приложение Какао полностью в C++. Какао полагается в большой степени на возможности позднего связывания Objective C для многих его базовых технологий, таких как Привязка Значения ключа, делегаты (Стиль какао), и шаблон целевого действия. Требования позднего связывания делают очень трудным реализовать Какао API в связанное время компиляции, типизированный язык как C++ вЃ±. Можно, конечно, записать чистое приложение C++, которое работает на OS X. Это просто не может использовать API Какао.
Так, у Вас есть две опции, если Вы хотите совместно использовать код между приложениями C++ на других платформах и Вашим Основанным на какао приложением. Первое должно записать образцовый слой в C++ и GUI в Какао. Это - общий подход, используемый некоторыми очень крупными приложениями, включая Mathematica. Ваш код C++ может быть оставлен без изменений (Вы не нуждаетесь в "броских" расширениях яблока записи или компилируете C++ на OS X). Ваш слой контроллера, вероятно, использует Objective C ++ (возможно, "броское" расширение Apple, которое Вы отсылаете к). Objective C ++ является надмножеством C++, как Objective C является надмножеством C. В Objective C ++, можно выполнить вызовы передачи сообщений objc-стиля (как [some-objc-object callMethod];
) из функции C++. С другой стороны можно вызвать функции C++ из кода ObjC как:
@interface MyClass {
MyCPPClass *cppInstance;
}
@end
@implementation MyClass
- (id)init {
if(self = [super init]) {
cppInstance = new MyCPPClass();
}
return self;
}
- (void) dealloc {
if(cppInstance != NULL) delete cppInstance;
[super dealloc];
}
- (void)callCpp {
cppInstance->SomeMethod();
}
@end
можно узнать больше о Objective C ++ на языке Objective C руководство . Слой представления может затем быть чистым Objective C.
вторая опция состоит в том, чтобы использовать межплатформенный инструментарий C++. инструментарий Qt мог бы отвечать всем требованиям. Межплатформенные инструментарии обычно презираются пользователями Mac, потому что они не получают все детали стиля, точно правильные и пользователи Mac ожидают полировку в UI приложений Mac. QT делает удивительно хорошее задание, однако, и в зависимости от аудитории и использования Вашего приложения, это может быть достаточно хорошо. Кроме того, Вы будете терпеть неудачу на некоторых определенных для OS X технологиях, таких как Базовая Анимация и некоторая функциональность QuickTime, хотя существуют приблизительные замены в QT API. Как Вы указываете, Углерод не будет портирован к 64-разрядному. Так как QT реализован на Углеродных API, Trolltech/Nokia имели к порту Qt к Какао API для создания его 64-разрядным совместимый. Мое понимание - то, что следующие повторно генерируют QT (в настоящее время в candiate выпуска), завершает этот переход и 64-разрядный совместимый на OS X. Можно хотеть взглянуть на источник Qt 4.5, если Вы интересуетесь интеграцией C++ и API Какао.
вЃ± Некоторое время Apple сделала Какао API доступный Java, но мост потребовал обширной настройки руки и не мог обработать больше передовых технологий, таких как Привязка Значения ключа, описанная выше. Ограниченные временем выполнения языки в настоящее время с динамическим контролем типов как Python, Ruby, и т.д. являются единственной реальной опцией для записи приложения Какао без Objective C (хотя, конечно, эти мосты используют Objective C под капотом).
В стандартной библиотеке Python есть модуль mmap, который можно использовать именно для этого. Дополнительную информацию можно найти в документации .
В зависимости от того, что вы хотите сделать, может быть достаточно открыть файл в двоичном режиме и прочитать данные с помощью обычных функций file :
# load it
with open("somefile", 'rb') as f:
data = f.read()
# do something with data
data.reverse()
# save it
with open("somefile.new", 'wb') as f:
f.write(data)
Python не заботится о том, содержит ли строка data
«двоичные» или «текстовые» данные. Если вы просто хотите внести простые изменения в файл разумного размера, этого, вероятно, будет достаточно.
Не говорю, что он «лучший», но в последнее время я использую GWT-Ext на работе. У него есть свои плюсы и минусы:
Плюсы:
Минусы:
Проверьте модуль stuct .
Этот модуль выполняет преобразования между значениями Python и структурами C, представленными в виде строк Python. Он использует строки формата (поясняемые ниже) в качестве компактного описания структуры структур C и предполагаемого преобразования в / из значений Python. Это можно использовать для обработки двоичных данных, хранящихся в файлах или из сетевых подключений, среди других источников.