我可以测试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");
有一种简单的方法可以测试它吗?
答案 0 :(得分:6)
不,你不能测试这个。 void *只是一个存储器地址,可以存储任何东西(甚至没有)。它的意思完全取决于实现,只有原始程序员(或文档)知道。
答案 1 :(得分:0)
实际上没有办法以非实现特定的方式进行这种检测,因为当您将NSString转换为void *时,您将丢弃所有类型信息并将其转换为“无类型指向内存的指针”。
我不确定你为什么要这种功能,但是如果它在两个对象之间,你应该使用“id”而不是void *,因为这样可以保留所有类型的信息。
在这个具体的例子中,将“log”作为重载函数从而知道参数编译时间的类型可能会更有意义。