Это правда, что приведение указателя функции к void*
не одобряется в C ++, потому что стандарт объявляет его неопределенным поведением.
Однако в случае чего-то вроде RegisterNatives
, естьна самом деле нет альтернативы.К счастью, компиляторы, которые вы, вероятно, будете использовать с JNI, достаточно хороши, чтобы заставить приведение вести себя так, как вы ожидаете, несмотря на протесты стандарта.
Для чего стоит, документация Visual C ++ для void
явно упоминает, что «пустой указатель может указывать на функцию», так что вы в хорошей форме по этому вопросу.Кроме того, функция POSIX dlsym
также требует, чтобы приведение типа «пустое к функции» было законным, поэтому маловероятно, что GCC вас здесь запутает.
Вы также можете проверить следующеедва ответа для получения дополнительной информации о законности и эффективности приведения между указателями void и указателями функций: