我有一個使用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. 用Objective-C++包裝C++代碼
- 5. 在Objective-C中分組對象Objective-C
- 6. 帶閉包的Swift init在Objective C中不可見Objective-C
- 7. 在Objective-C
- 8. 在Objective-C比
- 9. objective-C++和objective-c通信
- 10. OpenCV with Objective C vs Objective C++
- 11. 針對Objective-C的Bonjour通信包裝?
- 12. Objective-C中的二維數組Objective-C
- 13. 在C++和Objective-C
- 14. C# 「爲」 在Objective-C
- 15. IBOutlet中在Objective-C
- 16. Objective-c在windows中
- 17. C/Objective-C中是否有任何Lucene包裝?
- 18. C或Objective-C中的TCPDump輸出是否有包裝?
- 19. 將C++包裝到Objective-C中進行本機iOS開發
- 20. Objective-C和數據封裝
- 21. 灌裝NSMutableArray的Objective-C的
- 22. C++和Objective-C
- 23. C++和Objective-C
- 24. Objective c或C++?
- 25. 在Objective-C
- 26. EVAL在Objective-C
- 27. 在Objective-C
- 28. 類在Objective-C
- 29. NSRegularExpression在Objective-C
- 30. 在Objective-C