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.