0

私はObjective C(およびそのことについてはobjective-c ++)を学習しているだけで、次のコンストラクターを持つObjective-C ++クラスがあります。

void InputManager::_init (int inputAreaX, int inputAreaY, int inputAreaWidth, int inputAreaHeight)

Objective Cからこれを呼び出すにはどうすればよいですか?

4

2 に答える 2

2

これは純粋な C++ メソッドのように見えるため、通常の C++ とまったく同じように機能します (Objective-C++ ファイルであっても)。たとえば、スタックに変数を定義したとします。

InputManager mgr; // or, include constructor arguments if the class can't be default-constructed
mgr._init(x, y, w, h); // this assumes 4 variables exist with these names; use whatever parameter values you want

ただし、名前_initは少し奇妙です。これがクラスのコンストラクターになることを意味しますか? もしそうInputManager::InputManager(int x, int y, int w, int h)なら、おそらく代わりに定義されるべきです。

実際にこのクラスをObjective-C のみにしたい場合は、構文と動作が異なります。

于 2012-07-26T05:56:19.487 に答える
0

次の 2 つのオプションがあります。

オプション1。

Objective-C のみのコードに変換します。私は C++ はあまり得意ではありませんが、これは .h で次のように表示される可能性があります。

-(id)initWithAreaX: (int) inputAreaX AreaY: (int) inputAreaY AreaWidth: (int) inputAreaWidth AreaHeight: (int) inputAreaHeight;

これはコンストラクター メソッドのように見えるため、実装ではおそらく次のようになります。

-(id)initWithAreaX: (int) inputAreaX AreaY: (int) inputAreaY AreaWidth: (int) inputAreaWidth AreaHeight: (int) inputAreaHeight {

    self = [super init];

    if(self) {

        //Custom Initialization Code Here    
        _inputAreaX = inputAreaX;
        _inputAreaY = inputAreaY;
        _inputAreaWidth = inputAreaWidth;
        _inputAreaHeight = inputAreaHeight;
    }

    return self;
}

そして、あなたはそれを次のように呼ぶかもしれません:

InputManager *object = [[InputManager alloc] initWithAreaX: 20 AreaY: 20 AreaWidth: 25 AreaHeight: 25];

オプション 2。

Objective-C++ の全体的な目的は、開発者が C++ と Objective-C コードを統合できるようにすることです。Objective-C から Objective-C++ メソッドを呼び出す方法を知りたいと思っていますが、Objective-C++ の全体的な目的は 2 つを統合することであるため、Objective-C++ メソッドを呼び出すための抜け穴を見つけようとしても意味がありません。それ以外は完全に Objective-C のファイルです。したがって、2 番目のオプションは、".mm" 拡張子を持つ Objective-C++ ファイルで Objective-C++ メソッドを呼び出すファイルを作成することです。

お役に立てれば!

于 2012-07-26T05:56:55.767 に答える