Forum: Compiler & IDEs eine Funktion, 2 mögliche Rückgabewerte


von Elias B. (bouni)


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

>Ich möchte vermeiden Standardmäßig ein uint16_t zurück zu bekommen und
>immer casten zu müssen.

Speicher knapp?

;-)

von Klaus W. (mfgkw)


Lesenswert?

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
}

von Elias B. (bouni)


Lesenswert?

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
Noch kein Account? Hier anmelden.