Связывание существующей структуры C ++ с приложением Objective-C + Cocoa

Я разработал рабочую среду для окон в школе, в которой есть все классы и методы, необходимые для работы окна. Вот пример части нескольких классов, я не собираюсь вставлять сюда весь код.

Widget.h (базовый класс)

class Widget {
    public:
        Widget(...);
        ...
        virtual std::string getLabel() const;
        virtual void setLabel(const std::string label);
        ...
    private:
        std::string m_label;
        Widget* m_parent;
        Measure m_position; // struct: int x, int y
        Measure m_size;
};

Button.h

class Button : public Widget {
    public:
        Button(...);
        ...
        virtual void setTarget(Widget* target);
        ...
    private:
        Widget* m_target;
};

LineEdit.h

class LineEdit : public Widget {
    public:
        LineEdit(...);
        ...
        virtual void setMaximumLenght(int lenght);
        ...
    private:
        int m_maximumLength;
};

И так далее ... Это все просто файлы заголовков, и я реализовал методы и т.д. внутри соответствующего .cpp файла.

Моя домашняя работа на этот период - реализовать их для Mac OS-X в Objective-C и Cocoa, чтобы заголовки работали как в OS-X, так и в Windows. Я могу отдыхать сам, но мне хотелось бы знать, как использовать эти файлы заголовков в OS-X, и поэтому просто переписать реализации в файл .m вместо .cpp. Любые идеи? Я новичок в этом деле.


person Community    schedule 26.11.2012    source источник
comment
Я заметил некоторую путаницу в вашем вопросе, поскольку iOS! = Mac, и вы, кажется, смешиваете два без разбора.   -  person Peter M    schedule 26.11.2012
comment
Упси, исправил на osx. Спасибо за заметку   -  person    schedule 26.11.2012


Ответы (1)


Вы можете комбинировать файлы .cpp и .m в одном проекте, что означает, что если в вашей реализации нет кода, специфичного для Windows, вы можете добавить его в проект и скомпилировать. Также существует концепция Objective-C ++. С его помощью вы можете писать код в .mm файлах, используя как C ++, так и Objective-C, и выполнять вызовы между ними.

С другой стороны, если вам действительно нужно реализовать все в Objective-C, вам нужно переписать заголовки для определения классов Objective-C (не C ++), а также переписать реализацию.

person Phillip Mills    schedule 26.11.2012
comment
Итак, в основном я могу создать LineEdit.mm-файл, который включает заголовок, а внутри файла сказать void LineEdit::setMaximumLength(int length) { <cocoa/objective-c code here> }, и он будет работать? - person ; 26.11.2012
comment
В целом, да. :) Вот ссылка на вопрос, на который я ответил, наверное, самым простым из возможных кодов Objective-C ++. Может быть, это поможет с концепцией. stackoverflow.com/questions/13236476/ Функция verifyCPP относится к тому, что вы предлагаете. - person Phillip Mills; 26.11.2012
comment
Оказалось, намного проще, чем я думал! Спасибо за Ваш ответ :) - person ; 26.11.2012
comment
Единственная проблема, с которой вы можете столкнуться, - это конфликты заголовков, особенно если код C ++ использует Boost или какую-либо другую библиотеку с огромной коллекцией заголовков, которые могут конфликтовать с Cocoa.h. В этом случае вы можете создать другой собственный класс C ++ (.mm), который представляет собой простой прокси-сервер, который не требует сложных включений в его .h-файл, а затем перенаправляет вызовы самому базовому объекту C ++ (.c ++). - person Mark Aufflick; 27.11.2012