009
05.12.2007, 09:11 Uhr
ao
(Operator)
|
Zitat von Hans: |
zu dieser Methode, den Wert zweier Variablen zu tauschen, sollte man noch anmerken, dass das nur mit ganzen Zahlen funktioniert, aber sonst nicht.
|
Die Methode tauscht zwei beliebige Bitmuster, egal, was sie darstellen. Theoretisch könnte man auch komplette Objekte tauschen, nur der C++-Compiler lässt das nicht zu, der will die Bitoperatoren nur auf Ganzzahlen anwenden.
Da kommt mir eine Idee ... man kann dem Compiler doch unterschieben, was man will ...
C++: |
#include <iostream> #include <string>
using namespace std;
template <typename T> void swapp (T & a, T & b) { unsigned char * pa = (unsigned char *) &a; // char-Pointer auf unsigned char * pb = (unsigned char *) &b; // die Objekte holen
for (int i = 0; i < sizeof (T); i++) // Objekte byte-weise tauschen { pb[i] = pa[i] ^ pb[i]; pa[i] = pa[i] ^ pb[i]; pb[i] = pa[i] ^ pb[i]; } }
int main() { string a = "Hallo"; string b = "Welt";
cout << "a = " << a << " b = " << b << endl; // a = Hallo b = Welt
swapp (a, b);
cout << "a = " << a << " b = " << b << endl; // a = Welt b = Hallo
return 0; }
|
Schlucken eure Compiler das? Meiner ja.
ao Dieser Post wurde am 05.12.2007 um 09:12 Uhr von ao editiert. |