Makro Template
-
Hi,
Ich würde gerne Folgendes durch den Präprozessor machen lassen.
Ohne Konstanten zu deklarieren.#define FILE_BUFFER_SIZE_1 10 #define FILE_BUFFER_SIZE_2 10000 #define FILE_BUFFER_SIZE_3 10000 #define free_bytes(x) (FILE_BUFFER_SIZE_(x)+Buffer_ptr[x]-Buffer_pos_ptr[x])Und dann eben schreiben können
free_bytes(1); free_bytes(2); free_bytes(3);
Beim kopilieren bekomme ich die Fehlermeldung:Fehler: es gibt keine Argumente für »FILE_BUFFER_SIZE_«, die von einem Templateparameter abhängen, weshalb eine Deklaration von »FILE_BUFFER_SIZE_« verfügbar sein muss
matrix.cpp:60: Fehler: (mit »-fpermissive« wird G++ den Code akzeptieren, aber die Verwendung eines nicht deklarierten Namens ist veraltet)
make: *** [matrix.o] Fehler 1Mit -fpermissive funktionierts auch nicht. Ihm fehlt in jedem Fall die dekleration von FILE_BUFFER_SIZE_
--------------------------------------------------------------------------
Was funktioniert ist:namespace buffer_size { const long int buf_size[3]={FILE_BUFFER_SIZE_1, FILE_BUFFER_SIZE_2 ,FILE_BUFFER_SIZE_3}; }und dann das makro
#define free_bytes(x) (buffer_size::buf_size[x]+Buffer_ptr[x]-Buffer_pos_ptr[x])Ich würde gerne aber die Konstanten einsparen.
Gruß
-
Nimm keine defines sondern konstanten. In deinem Fall ein konstantes Array.
Was wahrscheinlich auch gehen wuerde waeren Enums.
-

Ich such doch nach einer Lösung ohne die Selben. Ich hoffe daß es duch templates irgendwie geht. (Auch wegen der compiler meldung)
Gruß
-
AlexXXx schrieb:
Ich such doch nach einer Lösung ohne die Selben.
Aus welchem Grund?
-
Ich habs jetzt nicht getestestet, aber FILE_BUFFER_SIZE_##x statt FILE_BUFFER_SIZE_(x) sollte funktionieren. Dann darf aber bei free_bytes als Parameter nur eine hardgecodete Zahl angegeben werden, keine Variable und kein Ausdruck.
-
Jetzt aus garkeinem mehr.=)
Hat sich erledigt. Wußte nicht daß der comiler so effizient mit const variablen umgehen kann.
Gruß
-
@XMaster
Hey danke da haut hin.
Gibts auch ne Variante wo x nicht hard coded sein muß??
Würde gerne ne variable nehmen.
also ohneif(variable==1) makro(1) if(cariable==2) makro(2) . . .Gruß
-
Nein. Mit defines nicht. Nimm, wie schon gesagt das Array..