Написание оболочки для класса C ++ Factory для использования в Objective-C - PullRequest
0 голосов
/ 16 января 2019

У меня есть фабричный класс в 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 ++.

...