reinterpret_cast для void * не работает с указателями на функции
Я хочу переосмыслить приведение указателя функции в переменную void *. Тип указателя на функцию будет иметь тип.Class* (*)(void*)
Ниже приведен пример кода,
class Test
{
int a;
};
int main()
{
Test* *p(void **a);
void *f=reinterpret_cast(p);
}
Приведенный выше код хорошо работает с компиляторами Visual Studio / x86. Но с ARM-компилятором это дает ошибку компиляции. Дон»не знаю почему.
Ошибка: # 694: reinterpret_cast не может отбрасывать const или другие квалификаторы типа
Я читаю объяснение вПриведение указателя на функцию другого типа
Я был обеспокоен приведенным ниже объяснением.
Приведение между указателями на функции и обычными указателями (например, приведениеvoid (*)(void)
кvoid*
). Указатели на функции не подходятt обязательно того же размера, что и обычные указатели, поскольку на некоторых архитектурах они могут содержать дополнительную контекстную информацию. Это вероятно будет работать нормально на x86, но помните, что этос неопределенным поведением.
Как сделать такие преобразования изvoid (*)(void*) -> void*
эффективно, чтобы по крайней мере он компилируется почти одинаково в большинстве компиляторов?