Array mit "unbekannten" Werten ausgeben
-
Hallo!
Ich möchte eine Funktion schreiben, das die Werte eines Arrays ausgibt. so weit, so einfach.Wie kann ich die Funktion deklarieren, so dass es egal ist ob das Array int oder float-Werte verwaltet?
grüße
SvenPS: natürlich könnte ich 2 Funktionen schreiben, will aber mal wissen ob das so auch geht...
-
template <typename T> void printArray(std::ostream& out, const T* array, unsigned arraySize) { for (unsinged n = 0; n < arraySize; ++n) out << array[n]; }Tommi
-
Man könnte es natürlich auch mit std::copy machen
Ist aber auch nicht viel anders als die Lösung von tntnet
BR
#include <iostream> #include <algorithm> #include <iterator> template < typename T > void printArray(std::ostream& out, const T* array, size_t array_size ) { std::copy( array , array + array_size , std::ostream_iterator<T>( out , "\n" )); } int main() { int arr[] = { 1,2,3,4,5,6,7,8,9,0 }; printArray( std::cout , arr , 10 ); }
-
vielen dank für eure hilfe!
gibt es auch die möglichkeit die methode ohne templates umzusetzen?
grüße
-
Keine für C++ Sinnvolle (mir fällt ehrlich gesagt auch keine andere ein, wenn der Typ beliebig sein soll, spätestens bei der Ausgabe muss man ihn ja wieder kennen).
-
Sven1980 schrieb:
gibt es auch die möglichkeit die methode ohne templates umzusetzen?
ostream ist bereits ein Schablonen-Type also wird es schwierig das ganz ohne Schablonen umzusetzen.

Ein andere Möglichkeit wäre sämtliche Typen die dein Array enthalten kann von einer Basisklasse abzuleiten die eine virtuelle Methode enthält welche einen ostream per Reference übernimmt.
-
Klar geht das. Aber es wird dir nicht gefallen:
void printArray(std::ostream& out, const int* array, unsigned arraySize) { for (unsinged n = 0; n < arraySize; ++n) out << array[n]; } void printArray(std::ostream& out, const float* array, unsigned arraySize) { for (unsinged n = 0; n < arraySize; ++n) out << array[n]; }:p
oder man macht es so, dass man für jeden typ erstmal ne klasse erstellt die von Streamable erbt. Und ruft dann für alle objekte print() auf. Das wäre dann absoluter blödsinn

templates sind genau für das gemacht worden was du machen willst. alles andere wäre ein workaround, ein hack. also nichts wirklich schönes.
-
Dafür gibts Makros (#define)