приведение функции указателя от одного прототипа к другому и обратно? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть базовый класс, который содержит WNDPROC член, но некоторые производные классы, такие как элементы управления, используют вместо этого SUBCLASSPROC, оба из которых являются указателями на функцию оконной процедуры, просто другой прототип.

Я хочу чтобы не иметь 2 членов во всех производных классах, потому что только один будет использоваться всеми экземплярами.

Так что мой вопрос, могу ли я reinterpret_cast из одного указателя функции в другой, а затем вернуть обратно? это безопасно?

например:

SUBCLASSPROC fnptr = /* some function */

WNDPROC data = reinterpret_cast<WNDPROC>(fnptr);

// is this pointer "original_pointer" valid now?
SUBCLASSPROC original_pointer = reinterpret_cast<SUBCLASSPROC>(data);

В основном в этом примере указатель data используется только для хранения указателя функции другого типа.

btw. Я знаю, что мог бы использовать шаблонный элемент, но мой дизайн не позволяет этого, так как указатель data является членом еще одной структуры, над которой у меня нет контроля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...