如何测试void指针是结构还是字符串?

时间:2012-02-14 18:40:59

标签: objective-c

我可以测试void指针的类型吗?我想解决这个问题:

void log(void *test) {
    if (is a struct) {
        NSLog(test);
    } else {
        printf("%s\n", test);
    }    
}

log(@"This send a struct (NSString)");
log("This send normal string");

有一种简单的方法可以测试它吗?

2 个答案:

答案 0 :(得分:6)

不,你不能测试这个。 void *只是一个存储器地址,可以存储任何东西(甚至没有)。它的意思完全取决于实现,只有原始程序员(或文档)知道。

答案 1 :(得分:0)

实际上没有办法以非实现特定的方式进行这种检测,因为当您将NSString转换为void *时,您将丢弃所有类型信息并将其转换为“无类型指向内存的指针”。

我不确定你为什么要这种功能,但是如果它在两个对象之间,你应该使用“id”而不是void *,因为这样可以保留所有类型的信息。

在这个具体的例子中,将“log”作为重载函数从而知道参数编译时间的类型可能会更有意义。