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* эффективно, чтобы по крайней мере он компилируется почти одинаково в большинстве компиляторов?

Ответы на вопрос(5)

Ваш ответ на вопрос