Smartpointerwahl
-
Ich möchte eine Templatefunktion schreiben, die einen Zeichenkettenliteral (const char*) in Array vom Typ X (Templateparameter) kopiert und einen Zeiger auf dieses Array zurück gibt. Im Normalfall wird das Funktionsergebnis keiner Variablen zugewiesen, sondern z.B. nur für die Ausgabe dem << Operator übergeben. Daher sollte der Speicher nur für das aktuelle Scope belegt sein und danach wieder freigegeben werden. Gibt es für diesen Zweck schon eine geeignet Smartpointerklasse?
-
boost::shared_array.
Deine Idee kommt mir aber sehr fragwürdig vor. Wozu soll es gut sein, ein Stringliteral in ein Array eines anderen Typs zu kopieren, noch dazu nur zum Ausgeben?
-
In einem Ausgabeoperator möchte ich zusätzlich Zeichen zur Strukturierung ausgeben. Die Funktion soll den richtigen Stringliteraltyp erzeugen. Oder gibts da schon was fertiges?
-
Smartpointer, Schmarnpointer...
Kapsel das "Array" einfach...
template<class X> struct identity : std::unary_function<X,X> { X operator()(X const& x) const {return x;} }; template<class X> class wtf { std::vector<X> vec; template<class F> void init(F f, const char* p); { while (*p) { vec.push_back(f(*p++)); } } public: explicit wtf(const char* p) {init(identity<char>(),p);} template<class F> wtf(const char* p, F f) {init(f,p);} friend std::ostream& operator<<(std::ostream& os, wtf const& w) { ...ausgabe... } }; ... int main() { wtf<int>("what the f*ck?"); }
(ungetestet)
-
krümelkacker schrieb:
Kapsel das "Array" einfach...
Und warum dann nicht gleich std::tr1::array?