[英]objective-c wrapper invoking c++ static member functions
我试图在纯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-edition-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 ()
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.