010
02.11.2016, 14:05 Uhr
ao
(Operator)
|
Hier ist ein Ansatz, der ~somebodys Vorschlag entspricht: Der Ausgabepuffer als Klassen-Member:
C++: |
#include <stdio.h>
class X { int n; // irgendein Member char text [16]; // Ausgabepuffer public:
X (int n_) : n (n_) {} operator char * (void); };
X::operator char * () { sprintf (text, "%d", n); return text; }
int main () { X x(5); const char*dataAsString = x; printf("x=%s\n",dataAsString); return 0; }
|
Beachte, dass der operator char* hier nicht mehr mit "const" dekoriert ist. Das ist nicht möglich, weil innerhalb des Operators ein Klassenmember verändert wird, nämlich das text. Das soll laut deiner Aufgabenstellung nicht sein.
Richtig funktionieren tut das aber, weil die Rückgabe "return text;" diesmal ein Objekt retourniert, das auch nach Verlassen der Operatorfunktion noch lebt.
Ein weiteres Problem entsteht, wenn man die Klasse multi-threaded verwendet: Hat man ein Programm, das in mehreren konkurrierenden Threads, also quasi-gleichzeitig sowas wie "const char * dataAsString = x;" macht, und zwar auf demselben x, dann wird man es erleben, dass das Array text, das ja nur einmal existiert, von mehreren Seiten zugleich beschrieben wird. Die Ergebnisse können extrem lustig sein.
Weiter im nächsten Beitrag. |