确定它是否是C++中的进程或线程

Ter*_* Li 1 c++ multithreading pointers process void-pointers

给一个void *变量作为输入(只能指向一个进程或线程),我想首先确定它的类型,然后将其转换为该类型.

我应该如何在C++中做到这一点?我知道这是一个愚蠢的问题,但我以前从未做过C/C++,也不能想到C/C++.

编辑:我需要在Linux和Windows上实现这一点.

Mat*_*lia 5

你不能.指针包含两条信息:内存中它们指向的位置以及指向对象的类型.有了void *这个,最后的信息被省略了,并且没有办法重建它所指向的类型.因此,您需要携带此指针另一个值,指定它实际指向的内容(您可以使用例如enum).

在C++中以某种方式与此任务相关的唯一工具是RTTI,但它仅适用于指向多态类的指针(RTTI通常利用对象的vtable来存储有关指针动态类型的附加信息,但可以访问vtable并且只有在知道对象属于特定的多态类层次结构时才能正确解释.


我正在寻找一种统一的方式来传递pid或tid,但会以不同的方式处理ID.对不起,我可能没有正确说明我的问题.

嗯,这是一个完全不同的事情......如果你需要在你的内部传递你的PID/TID,void *你可以简单地创建一个struct或类似的东西与ID的成员和一个存储,如果这样的ID是PID或TID.