Автоматическая генерация кода для моста Objective C в C ++ - PullRequest
5 голосов
/ 02 апреля 2009

Я ищу мнение разработчиков Mac / iPhone о новом проекте. Идея состоит в том, чтобы начать инициативу с открытым исходным кодом, используя swig (www.swig.org) для автоматического создания моста от цели c к c ++, чтобы можно было получить доступ к приложениям c ++ из касания какао / какао.

Apple предоставляет очень хорошую поддержку для смешивания цели c и c ++ через цель c ++, но написание этих мостов вручную может быть утомительным и подверженным ошибкам. Этот проект намеревается предоставить способ автоматической генерации целевых интерфейсов c и оболочек над c ++, чтобы любое сенсорное приложение какао или какао могло видеть объектно-ориентированный интерфейс target c с c ++ внизу.

Буду очень признателен за любые мнения или предложения по поводу этой идеи.

Ответы [ 2 ]

4 голосов
/ 02 апреля 2009

Я не думаю, что это необходимо. С Objective-C ++ вам совсем не нужен мост. Данный класс C ++ определен

class Foo {
  public:
    void someMethod(void);
}

вы можете использовать этот класс в любом месте кода Objective-C ++. Например, в методе:

- (void)myObjCMethod {
  Foo myFoo;

  myFoo.someMethod();

  //etc.
}

У вас могут быть переменные экземпляра, которые указывают на классы C ++, поэтому вы можете определить класс Objective-C, например,

@interface Bar : NSObject {
  Foo *foo;
}

@property (assign) Foo * foo;
@end

@implementation
@synthesize foo;

- (void)dalloc {
  delete foo;
  [super dealloc];
}

- (id)init {
  if(self = [super init]) {
    foo = new Foo();
  }

  return self;
}

- (void)aMethod {
   self.foo->barMethod();
} 

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

Если вы действительно хотите «соединить» класс C ++, у вас будут общие проблемы, поскольку такие вещи, как множественное наследование и перегрузка операторов, не поддерживаются в объектной модели Objective-C.

1 голос
/ 02 апреля 2009

Мне кажется, что это достаточно хорошая идея, и я удивлюсь, если чего-то подобного не существует. С другой стороны, поскольку вы можете скомпилировать C ++ напрямую (посмотрите, что дает расширение .mm), это может быть несколько тривиально.

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