У меня есть базовый класс, который содержит 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
является членом еще одной структуры, над которой у меня нет контроля.