Я пытаюсь удалить c-style cast из некоторого кода, над которым я работаю, и у меня есть опасения по поводу единственной альтернативы.
Исходный код:
WPARAM param = (WPARAM)(GetDlgItem(IDC_WORKFLOW).m_hWnd);
this->PostMessage(WM_NEXTDLGCTL, param, TRUE);
Если я использую статический приведение:
WPARAM param = static_cast<WPARAM>(GetDlgItem(IDC_WORKFLOW).m_hWnd);
this->PostMessage(WM_NEXTDLGCTL, param, TRUE);
Я получаю сообщение об ошибке "static_cast": невозможно преобразовать из "HWND" в "WPARAM", потому что нет допустимого преобразования между базовыми типами. Это оставляет меня "опцией дьявола":
WPARAM param = reinterpret_cast<WPARAM>(GetDlgItem(IDC_WORKFLOW).m_hWnd);
this->PostMessage(WM_NEXTDLGCTL, param, TRUE);
Как я понимаю, если static_cast невозможно, и это не связано с константой, C-cast должен делать reinterpret_cast в любом случае, а это значит, что базовый код должен отбрасываться, что означает, что это безопасно (пункт 3 в примечаниях). Но я хотел бы подтвердить это, прежде чем просто изменить код.
Является ли это безопасным в этом конкретном экземпляре и как это подтвердить? Если нет, то какова альтернатива?