假设我有两个目标c ++对象,每个对象包含一个给定的本机c ++对象:
A,B =客观c ++对象类型
Acpp,Bcpp = c ++对象类型
在B.mm
#import "Bcpp.h"
#import "B.h"
@interface B ()
{
Bcpp myBcpp; // declare instance c++ variable of type Bcpp
}
@end
在A.mm
#import "Acpp.h"
#import "A.h"
@interface A ()
{
Acpp myAcpp; // declare instance c++ variable of type Acpp
}
@end
@implementation A
// method to return an instance of B from an instance of A (self)
- (B)GetBfromA
{
Bcpp *bfroma = myAcpp.GetBfromA(); // return c++ object
// How do i find the objective C++ object B from its wrapped c++ instance bfroma?
}
@end
这样做的原因是我们有一个成熟的c ++数据结构,我们希望用客观的c ++对象包装它。这是最好的方式吗?如果是,我们如何解决反向映射问题?
编辑:感谢早期的响应者,但我有一个比上面暗示的更棘手的情况。假设函数GetBFromA()返回已经声明的Bcpp实例(作为B实例的实例变量)。所以我持有一个指向Bcpp对象的指针,该对象本身就是B类目标C ++对象的实例变量。如何从Bcpp实例中找到B的实例?答案 0 :(得分:0)
您可能需要做的是能够从B
创建Bcpp
。因此需要修改B
以使用-initWithBcpp:
方法:
- (id)initWithBcpp:(Bcpp*)bcpp
{
self = [super init];
if (self != nil)
{
myBcpp = *bcpp;
}
return self;
}
然后,在GetBFromA
中,您需要从B
创建Bcpp*
:
- (B*)GetBfromA
{
Bcpp *bfroma = myAcpp.GetBfromA(); // return c++ object
B* result = [[B alloc] initWithBcpp:bfroma];
return result;
}