我有一个使用Boost/WXWidgets编写的,针对Windows和Mac OSX的C++应用程序。但是,我遇到了一个我无法使用这些库解决的问题。我的解决方案要求我包装一个Objective C类,以便可以从我的一个C++模块中调用它。迄今为止,我的研究告诉我,我需要将Objective C++写入源文件,扩展名为.mm,允许XCode将该文件视为Objective C和C++的混合体。我发现了大量的文章,详细说明如何包装C++,以便可以从ObjectiveC中调用它,但没有任何相反的细节。任何链接到文章,或者更好的是,一个工作的例子,将不胜感激。在Objective C中包装Objective C C++/C++
6
A
回答
2
只是混合它(但不要忘记设置池)。有用。
// obj-c code, in .mm file
void functionContainingObjC(){
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
[lots of brackets!];
[pool release];
}
// c++ code, in .cc file
functionContainingObjC();
4
如果你想围绕一个目标C类可重复使用的纯C++包装中,Pimpl idiom工作得很好。 Pimpl的习惯用法将使得在纯C++代码中包含的头文件中没有Objective C/Cocoa东西可见。
// FooWrapper.hpp
// Absolutely no Cocoa includes or types here!
class FooWrapper
{
public:
int bar();
private:
struct Impl; // Forward declaration
Impl* impl;
};
// FooWrapper.mm
@import "FooWraper.hpp"
@import "Foundation/NSFoo.h"
struct FooWrapper::Impl
{
NSFoo* nsFoo;
};
FooWrapper::FooWrapper() : impl(new Impl)
{
impl->nsFoo = [[NSFoo alloc] init];
}
FooWrapper::~FooWrapper()
{
[impl->nsFoo release];
delete impl;
}
int FooWrapper::bar()
{
return [impl->nsFoo getInteger];
}
1
objc提供I2C接口的基本接口和类型(#include <objc/headers_you_need.h>
。因此,可以在纯C使用这些接口/ C++的TU。然后包括在毫米等基金会或了AppKit库和使用objc类型和消息在执行中
以下是一个非基本的接口,它不是类型安全的,但是我鼓励你为它所包装的objc类型设置类型安全性,这应该足以让你开始朝着正确的方向发展
// .hpp
namespace MON {
// could be an auto pointer or a dumb pointer; depending on your needs
class t_MONSubclassWrapper {
public:
// usual stuff here...
// example wrapper usage:
void release();
private:
id d_objcInstance;
};
} /* << MON */
// .mm
...
#include <Foundation/Foundation.h>
MON::t_MONSubclassWrapper::t_MONSubclassWrapper() :
d_objcInstance([[MONSubclass alloc] init]) {
}
...
void MON::t_MONSubclassWrapper::release() {
[d_objcInstance release];
}
相关问题
- 1. Objective-C中包装C++类
- 2. 如何在Objective-C中包装C++库?
- 3. Objective c Git API包装?
- 4. 带闭包的Swift init在Objective C中不可见Objective-C
- 5. 在Objective-C
- 6. 在Objective-C比
- 7. Objective-C中的二维数组Objective-C
- 8. IBOutlet中在Objective-C
- 9. C/Objective-C中是否有任何Lucene包装?
- 10. C或Objective-C中的TCPDump输出是否有包装?
- 11. 灌装NSMutableArray的Objective-C的
- 12. C++和Objective-C
- 13. Objective c或C++?
- 14. 在Objective-C
- 15. 在Objective-C
- 16. 在Objective-C
- 17. 在Objective-C
- 18. 在Objective-C
- 19. 在Objective-C
- 20. 在Objective-C
- 21. 在Objective-C
- 22. 在Objective-C
- 23. 在Objective-C
- 24. 在Objective-c
- 25. NSRegularExpression在Objective-C
- 26. 在Objective-C
- 27. 在Objective-C
- 28. 在Objective-C
- 29. 在Objective-C
- 30. EVAL在Objective-C