【发布时间】:2018-05-04 10:25:57
【问题描述】:
如何检查 void* 指针下的运行时类型。比如这样的函数怎么写:
void f(void *p) {
// check if *p is an int or a vector
}
欢迎使用现代 C++ 版本(14、17)。作为未来的信息,未来的版本也很有趣。
没有基类,也没有通用的虚方法和简单类型,所以How to determine actual object type at runtime in C++; 不完全相关。
编辑:
好的,在某些情况下,如果调用者知道指针的真实类型,重载可能是上述简化示例的解决方案。但是稍微复杂一点的事情呢:
using ::std::vector;
void f(vector<void*> v) {
// check if particular *v[i]'s are ints or vectors
}
函数声明中的 void* 也不是我的主意。
【问题讨论】:
-
你为什么要这样做??
-
这是你不应该做的事情。这个陈述甚至可以证明一个感叹号是合理的。除此之外,你不能这样做。
-
在运行时无法查询无类型指针引用的内存中的内容。毕竟,内存只是一个原始的字节序列。每个字节都与任何其他字节相同。 C++ 不能以这种方式工作。
-
如果您将
void*作为参数传递,并且您关心它是什么类型;那你就错了。 -
void *p的语义是“p可能指向也可能不指向某种数量的数据(或函数、套接字等)”。这在 C++ 中并不是那么有用。
标签: c++