Существует множество решений.
Например, отслеживайте все созданные объекты Process
и Thread
.Сохраните их в set<void*>
и проверьте наличие этих void*
в ProcessSet
или ThreadSet
.Это решение просто требует, чтобы вы знали, где расположены объекты.
Другие подходы требуют некоторой способности уважать.
Очевидно, если вы определили типы Process
и Thread
, дайте им общий базовый класс и передайте его вместо void*
.Это основной ООП.Затем вы можете использовать RTTI, чтобы найти производный тип.Но, скорее всего, в этой ситуации, рефакторинг / редизайн избавит от необходимости в первую очередь.
Если вы не можете добавить базовый тип, вы можете добавить обертку и передать ее.Это работает, даже если все, что вы когда-либо видите, это пустота *.Это похоже на решение set<>
, в котором вам необходимо знать тип при выделении.
struct ProcessOrThread
{
bool isProcess_;
void* handle_;
};
Все это действительно сводится к следующему: если вы знаете тип для начала, избегайте егоинформация прочь в первую очередь.