void* Template-Klassen Parameter



  • Hi,

    ich wollte eine Wrapper-Klasse für Win32-Handles schreiben.
    Bei dieser Klasse soll man unter anderem einen Parameter angeben, der einen ungültigen Handle-Wert repräsentiert. Bei Win32 ist das meistens NULL oder INVALID_HANDLE_VALUE.

    Hier mein bisheriger Code (ohne WinAPI-Zeug)

    #define INVALID_HANDLE_VALUE_2 ((void*)-1)
    
    template<void* InvalidHandleValue>
    class Handle
    {
    };
    
    int main()
    {
    	Handle<INVALID_HANDLE_VALUE_2> handle;
    }
    

    Unter Visual C++ funktioniert das auch. Leider meldet aber der g++ 3.3.1 Compiler:

    handle_test.cpp:10: error: `0ffffffff' is not a valid template argument
    handle_test.cpp:10: error: it must be the address of an object with external
    linkage
    

    Habt ihr ne Idee wie man es auf beiden Compilern zum Laufen bekommt?



  • das problem kenn ich:
    man kann einem templatre keinen pointer übergeben, ausser er ist pointer auf ein array, welches mit static deklariert wurde.

    was du machen kannst, ist einen int wert zu übergeben, und den nach void* zu casten.

    btw: -1 als void* ist schon wieder valid, falls ich mich recht entsinne 🙂



  • otze schrieb:

    man kann einem templatre keinen pointer übergeben, ausser er ist pointer auf ein array, welches mit static deklariert wurde

    Nee, das stimmt nicht. Lies dir mal 14.1-4 im Standard durch, da steht ganz genau, was für Zeiger übergeben werden dürfen.


Anmelden zum Antworten