#define GetNSValueFromCType(cValue) ([NSValue value:&cValue withObjCType:@encode(typeof(cValue))])
#define SetCValueFromNSValue(ocValue, cValue) [ocValue getValue:&cValue]
使用方法如下:
int count = 10;
NSValue *value = GetNSValueFromCType(count);
int newCount;
SetCValueFromNSValue(value, newCount);
Vector和NSArray之间的转化
#define GetArrayFromVector(vec) ({\
NSMutableArray *arr = [NSMutableArray array];\
for(int i = 0; i < vec.size(); i++)\
{\
NSValue *value = GetNSValueFromCType(vec[i]);\
if (value != nil)\
[arr addObject:value];\
}\
[arr count] == 0 ? nil : arr;\
})
#define SetVectorFromArray(vec, type, arr) {\
for(int i = 0; i < [arr count]; i++)\
{\
type _value;\
SetCValueFromNSValue([arr objectAtIndex:i], _value);\
vec.push_back(_value);\
}\
}
使用方法:
struct hello
{
int a;
int b;
};
vector<hello> aVector;
hello a;
a.a = 10;
a.b = 100;
hello b;
b.a = 20;
b.b = 200;
aVector.push_back(a);
aVector.push_back(b);
NSArray *myArr = NdGetArrayFromVector(aVector);
vector<hello> bVector;
NdSetVectorFromArray(bVector, hello, myArr);

这篇博客介绍了如何在C++和Objective-C之间进行数据类型的转换,包括使用宏定义`GetNSValueFromCType`和`SetCValueFromNSValue`进行基本类型转换。此外,还详细阐述了从C++的`vector`到Objective-C的`NSArray`,以及从`NSArray`回转到`vector`的转换方法,这对于跨语言间的对象序列化和反序列化非常有用。
1077

被折叠的 条评论
为什么被折叠?



