调用c++静态成员函数的Objective-c包装器

objective-c wrapper invoking c++ static member functions

本文关键字:Objective-c 包装 函数 c++ 静态成员 调用      更新时间:2023-10-16

我正试图在纯c++类(.cpp)和纯objective-c对象(.m)之间制作一个objective-c++包装器(.mm)。在github上可以找到一个很好的工作示例。我可以构建和运行它没有问题。

但是我需要访问c++类中的静态成员函数。我修改了github的例子,删除了所有现有的函数,并引入了一个静态成员函数:

//  ==================
//  DummyModel.h
//  ==================
class DummyModel
{
    public:
        static int test ();
};
//  ==================
//  DummyModel.cpp
//  ==================
#include "DummyModel.h"

static int test ()
{
    int x = 1;
    return x;
}

//  ==================
//  DummyModelWrapper.h
//  ==================
#import <Foundation/Foundation.h>
@interface DummyModelWrapper : NSObject
- (int) test;
@end
//  ==================
//  DummyModelWrapper.mm
//  ==================
#import "DummyModelWrapper.h"
#import "DummyModel.h"
@implementation DummyModelWrapper
- (int) test
{
    int result;
    result = DummyModel::test();
    return result;
}
@end

这会产生以下错误:

Undefined symbols for architecture i386:
  "DummyModel::test()", referenced from:
      -[DummyModelWrapper test] in DummyModelWrapper.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

就是这个引用在DummyModelWrapper中进行测试。调用错误的Mm:

   result = DummyModel::test();

测试项目改编自github项目,它在未编辑的形式下编译和运行良好(它实例化DummyModel并调用实例上的成员函数)。当我尝试添加静态成员并从包装器对象访问它时,就会出现错误。

我已经阅读了我可以在stackoverflow和其他地方找到的所有内容,但只能找到涉及非静态成员函数的示例。

引用
http://www.philjordan.eu/article/mixing-objective-c-c + + -and-objective-c + +
http://robnapier.net/blog/wrapping cppfinal -版- 759
http://www.boralapps.com/an-objective-c-project-that-uses-c/294/

环境


Xcode 4.5.2/osx8.2(针对ios5+)

在DummyModel.cpp中,替换

static int test ()
{
    ...
}

int DummyModel::test ()
{
    ...
}