Hallo zusammen, ich grüble schon einige Zeit an folgendem Problem (C++): Wenn ich eine Funktion habe, meinetwegen "read", dann kann ich durch Überladung erreichen, das ich ihr entweder ein uint8_t oder ein uint16_t übergeben kann und es wird automatisch die passende Funktion aufgerufen. Was ist aber wenn die Funktion je nach an anderer Stelle stehender Konfiguration einen uint8_t oder einen uint16_t als Rückgabewert produziert? Gibt es für so was eine Patentlösung? Ich möchte vermeiden Standardmäßig ein uint16_t zurück zu bekommen und immer casten zu müssen. Gruss Elias
>Ich möchte vermeiden Standardmäßig ein uint16_t zurück zu bekommen und >immer casten zu müssen. Speicher knapp? ;-)
Templates?
1 | #include <stdint.h> |
2 | #include <iostream> |
3 | #include <fstream> |
4 | |
5 | |
6 | // liest ein T aus f und liefert es zurück
|
7 | template< typename T > T read( std::ifstream &f ) |
8 | {
|
9 | T value; |
10 | f.read( reinterpret_cast<char*>(&value), sizeof(T) ); |
11 | |
12 | // etwas Fehlerbehandlung könnte nicht schaden...
|
13 | |
14 | return value; |
15 | }
|
16 | |
17 | int main( int nargs, char **args ) |
18 | {
|
19 | std::ifstream datei( "verweis.txt", std::ios::binary ); |
20 | |
21 | uint8_t ui8; |
22 | ui8 = read<uint8_t>( datei ); |
23 | std::cout << " 8 Bit: 0x" << std::hex << (unsigned)ui8 << std::endl; |
24 | |
25 | uint16_t ui16; |
26 | ui16 = read<uint16_t>( datei ); |
27 | std::cout << "16 Bit: 0x" << std::hex << (unsigned)ui16 << std::endl; |
28 | |
29 | return 0; |
30 | }
|
Hallo nochmal :) Denk das ist genau was ich gesucht habe! Danke schon mal
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.