0

我只是在学习Objective C(和objective-c++),并且我有一个Objective-C++ 类,它具有以下构造函数。

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

如何从目标 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有点奇怪;您的意思是 this 是该类的构造函数吗?如果是这样,InputManager::InputManager(int x, int y, int w, int h)可能应该改为定义。

如果您实际上希望此类仅是 Objective-C,则语法和行为是不同的。

于 2012-07-26T05:56:19.487 回答
0

你有两个选择:

选项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++ 的全部目的就是将两者结合起来,所以没有必要去寻找漏洞调用 Objective-C++ 中的方法否则完全是Objective-C的文件。因此,第二个选项是在扩展名为“.mm”的 Objective-C++ 文件中创建要调用 Objective-C++ 方法的文件。

希望这可以帮助!

于 2012-07-26T05:56:55.767 回答