allocator + list



  • hallo, ich mal wieder ^^

    wenn ich eine liste habe und einen allocator übergeben bekomme, muss ich den doch in etwa so rebinden, oder?!

    template < typename T, typename TAlloc = typename std::allocator<T> >
    struct list
    {
      typedef typename TAlloc::rebind<node>::other allocator;
    

    gibt es noch nen anderen (sinnvolleren) weg?
    darf ich das überhaupt so machen oder sollte ich eher

    typedef typename TAlloc::rebind< typename node<TAlloc::value_type> >::other allocator;
    

    machen?
    Gibt es überhaupt Anwendungsbereiche, wo man nen allocator auf nen anderen Typ braucht, als den Listen-Typ?
    also so was vll: list<char, allocator<int>>
    oder wie auch immer

    was würdet ihr machen?

    bb



  • Gibt es überhaupt Anwendungsbereiche, wo man nen allocator auf nen anderen Typ braucht, als den Listen-Typ?

    Verstehe ich nicht. Dass du den für den "Node" Typ auch brauchst, hast du ja selbst schon geschrieben.
    Andere Container könnten auch mehr als nur einen "Node" Typ haben, die bräuchten dann auch mehr "rebinds".



  • Ich meinte, dass man absichtlich nen allocator von nem anderen Typen will, als den value_type - und zwar nicht intern sondern der aufrufer - es ging ja schließlich nur darum:

    typedef typename TAlloc::rebind<node>::other allocator;
                                 //typename node<T>
    //vs
    typedef typename TAlloc::rebind< typename node<TAlloc::value_type> >::other allocator;
    

    Ich hab zwar die Aufgabe jetzt schon abgegeben und die erste lösung genommen, aber interessieren würd es mich dennoch, was man in der praxis da so macht (ich weiß, in der praxis nimmt man std::list - aber davon abgesehen) ^^

    bb


Log in to reply