给一个void *
变量作为输入(只能指向一个进程或线程),我想先判断它的类型,然后再转换成那个类型。
我应该如何在 C++ 中执行此操作?我知道这是一个愚蠢的问题,但我以前从未用过 C/C++,也不能以 C/C++ 的方式思考。
编辑:我需要在 Linux 和 Windows 上实现这一点。
最佳答案
你不能。指针携带两条信息:它们指向的内存位置和指向对象的类型。使用 void *
时,这最后的信息会被省略,并且无法重建它指向的类型。因此,您需要将该指针携带另一个值来指定它实际指向的内容(您可以使用例如 enum
)。
C++ 中唯一与此任务相关的工具是 RTTI,但它仅适用于指向多态类的指针(RTTI 通常利用对象的 vtable 来存储有关指针动态类型的附加信息,但 vtable 可以仅当已知对象属于特定的多态类层次结构时才能访问和正确解释)。
I'm looking for a uniform way to pass pid or tid in but will treat the ids differently. Sorry, I might not properly state my problem.
好吧,这是完全不同的事情......如果你需要在 void *
中传递你的 PID/TID,你可以简单地创建一个 struct
或其他东西就像 ID 的一个成员和一个要存储的成员(如果这样的 ID 是 PID 或 TID)。
关于c++ - C++中判断是进程还是线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087098/