GCC und Funktionszeiger nach void*
-
Hi, ich bekomme es nicht hin einen Funkionszeiger mit MinGW/gcc in einen void* Pointer zu speichern. Warum geht das nicht? Mit Visual Studio funktioniert übrigens die erste Variante mit ptr0.
template <class T> T* CreateInt() { return new T(); } int main() { void* ptr0 = CreateInt<int>; void* ptr1 = &CreateInt<int>; void* ptr2 = reinterpret_cast<int*(*)()>(&CreateInt<int>); void* ptr3 = static_cast<int*(*)()>(&CreateInt<int>); void* ptr4 = reinterpret_cast<int*(*)()>(CreateInt<int>); void* ptr5 = static_cast<int*(*)()>(CreateInt<int>); return 0; }Fehlermeldungen sind immer:
cannot resolve overloaded function 'CreateInt' based on conversion to type 'void*'
invalid conversion from 'int* ()()' to 'void' [-fpermissive]
-
Nur object pointer types können implizit nach
void*konvertiert werden; Funktionszeiger bedürfen einesreinterpret_casts, welcher auch nur conditionally supported ist ([expr.reinterpret.cast]/8):auto ptr2 = reinterpret_cast<void*>(CreateInt<int>);
-
Danke dir funktioniert.