gpt4 book ai didi

c++ - 如何检查 void* 指针下的运行时类型(允许简单类型,无基类)?

转载 作者:行者123 更新时间:2023-11-27 23:46:29 24 4
gpt4 key购买 nike

如何检查 void* 指针下的运行时类型。比如这样一个函数怎么写:

void f(void *p) {
// check if *p is an int or a vector
}

欢迎使用现代 C++ 版本(14、17)。作为 future 的信息, future 版本也很有趣。

没有基类,也没有常见的虚方法和简单类型,所以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* 也不是我的主意。

最佳答案

目前还不是很清楚,为什么你首先要有一个 void*。一旦你有了一个 void* ,任何关于实际类型的信息都会丢失,你想写的函数在 C++ 中是不可能的。如果您想使用指向 int 的指针或指向 std::vector 的指针调用相同的方法,您宁愿使用重载:

void f(int* p) {
std::cout << "f called with pointer to int";
}

template <typename T>
void f(std::vector<T>* p) {
std::cout << "f called with pointer to vector";
}

关于c++ - 如何检查 void* 指针下的运行时类型(允许简单类型,无基类)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com