我目前正在开发一个需要一些objc绑定的项目。虽然我不是iOs的专家,但直到现在我的表现都相当不错。
我需要将一些C ++类型转换为Objc类型:
std::streamsize read(uint32_t *buffer) {
return _read(buffer, sizeof(uint32_t));
}
std::streamsize read(double *buffer) {
return _read(buffer, sizeof(double));
}
std::streamsize read(std::string *buffer) {
return _read(buffer, sizeof(std::string));
}
template<typename T>
std::streamsize _read(T *buffer, std::streamsize length) {
NSString* buff = (__bridge NSString *)buffer;
return [_memoryAdapter read:buff withLength:length];
}
我收到了这些错误:
Incompatible types casting 'unsigned int *' to 'NSString *' with a __bridge cast.
Incompatible types casting 'double *' to 'NSString *' with a __bridge cast.
看起来我的演员阵容几乎都失败了,除了std :: string one。
我使用__bridge错了吗?经过一些研究,我确实发现它用于将C和C ++类型转换为Objc。任何人都可以给我一个答案,暗示或/和我的错误的解释?我也查看了堆栈溢出到任何可能的重复或进一步的建议,但找不到任何东西。
提前致谢
编辑:我需要读入缓冲区并将读取的字节存储到指针中,这就是我试图将其转换为NSMutableString的原因。
- (NSInteger) read:(NSMutableString *)buffer withLength:(NSInteger)length {
const char* fileBytes = (const char*)[self._buffer bytes];
NSUInteger index;
for (index = 0; index< [self._buffer length]; index++)
{
if (index >= self._cursor) {
NSString *aByte = [NSString stringWithFormat:@"%c", fileBytes[index]];
[buffer appendString:aByte];
}
if (index >= self._cursor + length)
break;
}
self._cursor += length;
return length;
}