Таким образом, если Ваше преобразование из Пустоты* для Ввода* или из Типа* для Освобождения* должно Вы использовать:
void func(void *p)
{
Params *params = static_cast<Params*>(p);
}
или
void func(void *p)
{
Params *params = reinterpret_cast<Params*>(p);
}
Мне static_cast кажется более корректным, но я видел обоих используемых для той же цели. Кроме того, делает направление вопроса преобразования. т.е. если я все еще использую static_cast для:
_beginthread(func,0,static_cast<void*>(params)
Я считал другие вопросы на кастинге стиля C++, но я все еще не уверен, что корректный путь для этого сценария (я думаю, что это - static_cast),
Вам следует использовать static_cast, чтобы указатель правильно манипулировал и указывал в правильном месте. Однако вы должны делать это только в том случае, если вы использовали статическое приведение для преобразования указателя на void * в первую очередь. В противном случае вы должны переинтерпретировать_каст точно так же, как исходный указатель (без баз и т.п.).
Всегда следует избегать reinterpret_cast
, и в этом случае static_cast
выполнит задание. При преобразовании в указатель void *
не требуется никакого приведения.
Используйте для этого static_cast
с обеих сторон и сохраните reinterpret_cast
на тот случай, когда никакая другая операция приведения не будет работать. Следующие темы SO предоставляют больше контекста и подробностей:
Какие формулировки в стандарте C ++ допускают static_cast