0

doubleaで aを返す関数がありますvoid *。ただし、関数から一度0を返すため、ポインターが失われたり、値を取得できないようです。

double を作成し、それを void * の値に割り当ててから、範囲外にならずに返すにはどうすればよいでしょうか。

この関数の考え方は、オブジェクトを Objective-C から C++ の何かに変換することですが、C++ のすべてが、Objective C にある double などのオブジェクトであるとは限りません。

void * IDToSTD (id anObject){

void * stdObject = NULL;

if ([anObject class] == [PFObject class]) {
    stdObject = BridgePFObject((void *)CFBridgingRetain(anObject));
    return stdObject;
}

CFTypeRef inTypeRef = (__bridge CFTypeRef)anObject;
CFTypeID type = CFGetTypeID(inTypeRef);

if (type == CFArrayGetTypeID()) {
    std::vector<void *> arr = NSArrayToSTDVector([(NSArray *)anObject copy]);
    stdObject = &arr;
} else if (type == CFDictionaryGetTypeID()) {
    std::map<std::string, void *> dict = NSDictionaryToSTDMap([(NSDictionary *)anObject copy]);
    stdObject = &dict;
} else if (type == CFStringGetTypeID()) {
    stdObject = (char *)[(NSString *) anObject cStringUsingEncoding:NSUTF8StringEncoding];
} else if (type == CFNumberGetTypeID()) {
    double *value = (double *)malloc(sizeof(double *));
    *value = [(NSNumber *)anObject doubleValue];
    stdObject = value;
} else {
    [NSException raise:@"Invalid object value" format:@"Object must be of basic Core Foundation or Parse Type, Object Type is: %@", NSStringFromClass([anObject class])];
}

return stdObject;

}

4

1 に答える 1