【问题标题】:How to interact with C++ build within Xcode from Objective-C如何在 Objective-C 的 Xcode 中与 C++ 构建交互
【发布时间】:2017-10-17 08:35:37
【问题描述】:

我以前从未尝试过,因此非常感谢任何和所有 cmets 或建议。大局是我正在尝试在 iOS 应用程序中使用 C++ 文件。

整个项目都是从 C++ 文件开始的。不是 Objective-C(或 Swift)。 C++ 代码自己工作。

我能够使用 cmake -G Xcode .. 创建一个工作构建

要正确运行此构建,我需要在编辑方案下通过调整“Arguments Passed On Launch”,它可以完美运行。

现在问题来了。

1) 我如何链接方案以便它可以在 iOS 应用程序上启动此 C++ 构建?

2) 有没有办法以编程方式发送“Arguments Passed On Launch”?

3) 现在,C++ 构建使用cout 在 main.cpp 文件中显示结果。如何生成输出以便将其发送到 Objective-C 文件?

非常感谢任何大小的反馈或建议。谢谢。

【问题讨论】:

  • 如果你有 C++ 源代码,只需将它们添加到 Xcode 项目中。不需要单独构建它们。

标签: c++ objective-c xcode


【解决方案1】:

坏消息:Objective C 不理解 c++ 头文件。

好消息:但 Objective-C++ 确实如此

假设您希望将整个项目保留为 Objective-C,那么诀窍是围绕具有 Objective-C 接口的 C++ 对象提供 Objective-C++ 包装器。

示例:

包装器.h

@interface MyWrapper : NSObject
- (void) something;
@end

包装器.mm

#import "wrapper.h"
#include "cpp-class.hpp"

@implementation WyWrapper
{
    // private c++ data here
    std::unique_ptr<cpp_object> myobj_;
    // objects here unfortunately need to be default-constructible
}

- (id) init
{
    // because they are initialised here
    myobj_ = std::make_unique<cpp_object>();
}

- (void) something
{
    myobj_->do_something();
}
@end

【讨论】:

  • 感谢您的反馈。我的一个问题是,make_unique 和 unique_ptr 是包装器工作所必需的吗?谢谢。
  • @shle2821 不,不是。如果数据类型是默认可构造的,则不需要任何持有者或间接。
猜你喜欢
  • 2012-11-14
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多