Mittwoch, 14. April 2010

C++ Steams dressieren

Manchmal möchte man gerne bestimmte Aktionen auslösen die sich nach dem Abwickeln einer Streambefüllung zutragen sollen (z.B. das ein Lock freigeben). Hier ist ein kleiner Trick der genau das macht und in bestimmten Situationen durchaus hilfreich sein kann: wenn z.B. man durch widrige Umstände nicht in der Lage ist den Scope zu begrenzen.

#include <iostream>
#include <tr1/memory>

class Tester {
public:

Tester& operator<<(std::string s) {
std::cout << s;
return *this;
}

~Tester() {
std::cout << "End\n";
}
};

std::tr1::shared_ptr<Tester> wrapper() {
std::cout << "Begin\n";
return std::tr1::shared_ptr<Tester>(new Tester());
}

int main() {
*(wrapper()) << "A "<< "test!\n";
std::cout << "Ending scope\n";
return 0;
}

Keine Kommentare: