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?


Log in to reply