eine Funktion, 2 mögliche Rückgabewerte

OP #2402542
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
#2402562
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
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren