将CFTyPrEF转换为目标C++中的布尔
我想将objective c代码转换为objective cpp,并在我的应用程序中使用它。给定以下代码:将CFTyPrEF转换为目标C++中的布尔,c++,objective-c,casting,objective-c++,core-foundation,C++,Objective C,Casting,Objective C++,Core Foundation,我想将objective c代码转换为objective cpp,并在我的应用程序中使用它。给定以下代码: CFTypeRef dynamicValue = (__bridge CFTypeRef)([[NSBundle bundleWithPath:aStr] objectForInfoDictionaryKey: @"CFPlugInDynamicRegistration"]); BOOL removeFlag = NO; if(dynam
CFTypeRef dynamicValue = (__bridge CFTypeRef)([[NSBundle bundleWithPath:aStr] objectForInfoDictionaryKey: @"CFPlugInDynamicRegistration"]);
BOOL removeFlag = NO;
if(dynamicValue == nil)
{
removeFlag = NO;
}
else if( CFGetTypeID(dynamicValue) == CFBooleanGetTypeID() )
{
removeFlag = CFBooleanGetValue(dynamicValue);
}
else if( CFGetTypeID(dynamicValue) == CFStringGetTypeID() )
{
removeFlag = ( [[(__bridge NSString*)dynamicValue lowercaseString] isEqualToString:@"yes"] ? YES:NO);
}
if( removeFlag )
{
[unloadedArray addObject:aStr];
[sortedArray removeObjectAtIndex:hoge];
}
将文件名从file.m更改为file.mm并生成时出错:调用“CFBooleanGetValue”时没有匹配的函数
我试图包括,但我得到相同的错误,我想这是一个ifdef的问题
你知道有什么方法可以在不丢失函数的情况下进行强制转换吗?我是否应该尝试使用相同的函数?您可以使用此cfNumberTargetTypeID
NSString *aStr = @"";
CFTypeRef dynamicValue = (__bridge CFTypeRef)([[NSBundle bundleWithPath:aStr] objectForInfoDictionaryKey: @"CFPlugInDynamicRegistration"]);
BOOL removeFlag = NO;
if(dynamicValue == nil)
{
removeFlag = NO;
}
else if( CFGetTypeID(dynamicValue) == CFNumberGetTypeID() )
{
removeFlag = [(__bridge NSNumber *)dynamicValue boolValue];
}
else if( CFGetTypeID(dynamicValue) == CFStringGetTypeID() )
{
removeFlag = ( [[(__bridge NSString*)dynamicValue lowercaseString] isEqualToString:@"yes"] ? YES:NO);
}
if( removeFlag )
{
[unloadedArray addObject:aStr];
[sortedArray removeObjectAtIndex:hoge];
}
< C++ >从空隙转换到这里:CFTyPrEF到A 此处不同类型的指针:CFBooleanRef又名_CFBoolean*需要显式 铸造因此,这将解决问题:
removeFlag = CFBooleanGetValue(static_cast<CFBooleanRef>(dynamicValue));
这是用Objective-C和Objective-C++编译的 Objective-C++没有自动框架链接。
你需要包括和手动链接CopeFoundation框架。你的第一个例子不会编译在ObjultC++中,因为CFBoLangangeTalk是我问题的根源…关于第二个问题——假设国王是NSNumber或NSString安全吗?这意味着布尔值有点像NSNumber?@benams:事实上,我在一个.mm文件中尝试了我的第一个示例,它编译起来没有问题如果该值为其他值,则不会执行任何If块,布尔变量保持为“否”。这与代码中的行为相同。@benams:是的,属性列表中的布尔值作为NSNumberWhat的实例返回,关于CFGetTypeIDdynamicValue==CFBooleanGetTypeID,您的示例仅处理CFNumberGetTypeID和CFStringGetTypeID,而我的问题发生在CFBooleanGetTypeIDBool为数字0,1时,这与我的经验不同。我把OP的代码放到main.mm文件中。为CFBooleanGetValue参数添加静态强制转换后,代码编译和链接没有问题。不需要手动链接。@MartinR,啊,对了!我认为所有的应用程序都与CoreFoundation有关联。基础H已经包含了岩心。
id dynamicValue = [[NSBundle bundleWithPath:@"path"] objectForInfoDictionaryKey: @"CFPlugInDynamicRegistration"];
BOOL removeFlag = NO;
if ([dynamicValue isKindOfClass:[NSNumber class]]) {
removeFlag = ((NSNumber *)dynamicValue).boolValue;
} else if ([dynamicValue isKindOfClass:[NSString class]]) {
removeFlag = [((NSString *)dynamicValue).lowercaseString isEqualToString:@"yes"];
}