1

假设我有两个目标 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

毫米

#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 的实例?

4

1 回答 1

0

您可能需要做的是能够BBcpp. 所以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;
}
于 2012-09-04T04:33:41.223 回答