У меня есть фабричный класс в C ++, который мне нужно использовать в проекте Objective-C, поэтому я пытаюсь написать для него оболочку.
Ниже приведено определение суперкласса класса Widget.
class Widget
{
public:
Widget();
virtual ~Widget();
virtual Thingamajig getThingamajig() = 0;
};
Фабрика вернет подкласс Widget, а программа Objective-C будет использовать Thingamajig, предоставляемый Widget (я опускаю детали в Thingamajig - просто предположим, что это очень простой класс контейнера данных).
Вот класс фабрики:
class WidgetFactory
{
public:
/*...a series of integer constants defining the different types of widgets to be returned by
createWidget function below.*/
WidgetFactory();
~WidgetFactory();
Widget* createWidget( int type );
};
Поскольку я пишу оболочку, метод createWidget в классе фабрики нестатичен (createWidget изначально был статическим).
Теперь вот что у меня есть для оболочки Objective-C до сих пор.Это заголовок Objective-C ++ (файл mm):
@interface WidgetFactoryWrapper: NSObject
@end
@interface WidgetFactoryWrapper()
-(Widget*) createWidget: (int)type;
@end
Вот мои вопросы:
1) Мне пришла идея написать обертку таким образом из другой статьи SOздесь ( Вызов C ++ из Objective-C ).Тем не менее, я не думаю, что последний шаг написания чего-то вроде CplusplusMMClass, другого класса Objective-C ++, который использует оболочку Objective-C ++, необходим здесь - я должен просто вызвать оболочку Objective-C ++ здесь напрямую.Правильно ли мое мышление?
2) Хотя я признаю, что мне придется написать обертку вокруг Widget, придется ли мне делать это для всех его подклассов?
3) Если вы были вмои пресловутые ботинки, как бы вы поступили так?
Я испытываю желание просто перевести все в Objective-C, но я хочу иметь возможность повторно использовать то, что уже было написано на C ++.