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]


  • Mod

    Nur object pointer types können implizit nach void* konvertiert werden; Funktionszeiger bedürfen eines reinterpret_cast s, welcher auch nur conditionally supported ist ([expr.reinterpret.cast]/8):

    auto ptr2 = reinterpret_cast<void*>(CreateInt<int>);
    


  • Danke dir funktioniert.


Anmelden zum Antworten