1

与えられたネイティブ c++ オブジェクトをそれぞれラップする 2 つの客観的 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() が、(B のインスタンスのインスタンス変数として) 既に宣言されている Bcpp のインスタンスを返すとします。したがって、Bcpp オブジェクトへのポインターを保持しています。このオブジェクト自体は、B 型の目的の C++ オブジェクトのインスタンス変数です。Bcpp のインスタンスから B のインスタンスを見つけるにはどうすればよいですか?

4

1 に答える 1

0

おそらく行う必要があるのは、Bからを作成できるようにすることBcppです。したがって、メソッドBを持つように修正する必要があります。-initWithBcpp:

- (id)initWithBcpp:(Bcpp*)bcpp
{
    self = [super init];
    if (self != nil)
    {
        myBcpp = *bcpp;
    }
    return self;
}

次に、 で、からGetBFromAを作成する必要があります。BBcpp*

- (B*)GetBfromA
{
    Bcpp *bfroma = myAcpp.GetBfromA(); // return c++ object
    B* result = [[B alloc] initWithBcpp:bfroma];
    return result;
}
于 2012-09-04T04:33:41.223 に答える