Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » boost::shared_ptr * STL Algorithmen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.10.2005, 21:56 Uhr
Spacelord
Hoffnungsloser Fall


Hallo,
wie handhabt ihr es wenn ihr einen Container(liste,vector oder was auch immer) mit shared_ptr Instanzen habt und STL Algorithmen nutzen wollt?
Ich meine die üblichen Adaptoren bringen einem ja nix weil der "Inhalt" des entsprechenden Iterators ja doppelt dereferenziert werden muss um an das eigentliche Objekt zu kommen.
Die Standardalgorithmen führen aber nur eine einfache Dereferenzierung des Iterators durch.
Da kommt also irgendein shared_ptr<T> bei raus anstatt T.
Ich hab es jetzt so gelöst dass ich mir nen template geschrieben hab dass die zweite Dereferenzierung erledigt und damit den Functor füttert.

C++:
template<class _functor>
struct deref_shared_ptr:public std::unary_function<
        boost::shared_ptr<_functor::argument_type>,
        typename _functor::result_type>
{
    public:
        deref_shared_ptr(_functor _f):_ft(_f){}
        inline result_type operator()(boost::shared_ptr<typename _functor::argument_type>& _p)
        {
            return _ft(*_p);
        }
    protected:
        _functor _ft;
};

template <class _functor>
inline deref_shared_ptr<_functor> dref(const _functor &_ft)
{
    return deref_shared_ptr<_functor> (_ft);
}



In der Anwendung sieht das Ganze dann etwa so aus:

C++:
sequence::iterator sequence::find(const ordered_pair& op)
{
    return std::find_if(_con.begin(),_con.end(),dref(std::bind2nd(std::equal_to<ordered_pair>(),op)));
}



Lässt sich der gleiche Effekt auch eleganter erzielen?
Oder habt ihr irgendwelche Verbesserungsvorschläge?

Da das was ist was wirklich wiederverwendbar ist,und ich nicht so der template Crack bin, bin ich für konstruktive Anregungen dankbar um das ganze in ne brauchbare Form zu bekommen.

MfG Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.

Dieser Post wurde am 04.10.2005 um 21:58 Uhr von Spacelord editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.10.2005, 12:34 Uhr
virtual
Sexiest Bit alive
(Operator)


Also im Wesentlichen würde ich dieses Problem ähnlich lösen
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: