【问题标题】:Linking existing C++ framework to an Objective-C + Cocoa application将现有 C++ 框架链接到 Objective-C + Cocoa 应用程序
【发布时间】:2012-11-26 14:21:13
【问题描述】:

我在学校为 windows 开发了一个工作框架,其中包含 windows 工作所需的所有类和方法。这是几个类的一部分的示例,我不会在这里粘贴所有代码。

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;
};

按钮.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文件里面实现了方法等。

我这段时间的作业是在 Objective-C 和 Cocoa 中为 Mac 的 OS-X 实现它们,因此标头在 OS-X 和 Windows 中都可以使用。我可以自己休息,但我想知道如何在 OS-X 中使用这些头文件,因此只需将实现重写为 .m 文件,而不是 .cpp。有任何想法吗?我是新手。

【问题讨论】:

  • 作为 iOS != Mac,我在您的问题中感到有些困惑,而且您似乎不分青红皂白地将两者混为一谈。
  • Upsie,已将其修复为 osx。感谢您的来信

标签: c++ objective-c macos cocoa multiplatform


【解决方案1】:

您可以在同一个项目中合并 .cpp 文件和 .m 文件,这意味着如果您的实现没有任何 Windows 特定代码,您可以将其添加到项目中并进行编译。还有Objective-C++的概念。有了它,您可以使用 C++ 和 Objective-C 在.mm 文件中编写代码并在它们之间进行调用。

另一方面,如果您真的需要在 Objective-C 中实现所有内容,则需要重写头文件以定义 Objective-C 类(不是 C++ 类)以及重写实现。

【讨论】:

  • 所以基本上我可以创建一个包含标题的LineEdit.mm-file,并在文件中说void LineEdit::setMaximumLength(int length) { <cocoa/objective-c code here> },它会工作吗?
  • 非常基本上,是的。 :) 这是一个问题的链接,我在其中回答了可能是最简单的 Objective-C++ 代码。也许这将有助于这个概念。 stackoverflow.com/questions/13236476/… verifyCPP 函数与您的建议有关。
  • 似乎比我想象的要容易得多!谢谢你的回答:)
  • 你可能遇到的一个问题是头文件冲突——特别是如果 C++ 代码使用 Boost 或其他一些库,其中包含大量可能与 Cocoa.h 冲突的头文件。在这种情况下,您可以做的是创建另一个您自己的 C++ (.mm) 类,它是一个简单的代理,不需要在其 .h 文件中包含复杂的内容,然后将调用转发到底层 C++ (.c++) 对象本身。
猜你喜欢
  • 1970-01-01
  • 2012-02-15
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多