[Debtags-devel] Hello, and a few improved tag descriptions

Benjamin Mesing bensmail@gmx.net
Fri, 03 Jun 2005 14:09:40 +0200


--=-WJr0hIj1Rpj4PaLopV9N
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

Hello,



> I liked the idea of a tighter integration between Debtags classes and
> the STL, like making Debtags classes work with STL algorithms; and I
> heard something nice about adaptor classes, that turn an operator()
> invocation in a consumer::consume() invocation or an invocation of any
> other method of a class which is not specifically a consumer.
> 
> That would mean that a class wouldn't need to be a consumer to get
> packages, and that many of its methods could be fed packages by some
> producer.
I am fan of C++ and I also appreciate the possibility to use functors.
But in my opinion functors are most usefull when providing algorithms.
Implementing an interface is far more expressive than overloading the
operator(). Others might disagree here... 
Functors do make sense from time to time (consider the for_each
function). But also note, that the C++ way of using templates for
algorithms in combination with adapters and binders are complicated to
use, mostly less readable than explicit loops and not as flexible as one
might expect. I worked hard to achieve my goals using std algorithms
because Stroustrup is so fond of them, but finally I gave up because of
the problems mentioned above. Nevertheless there might be one or another
std::for_each or std::copy flying around in packagesearch.
That said, I summarize myy opinion in going with Mike: Be carefull with
functors.


I've attached an article discussing the limitations of adapters and
binders.

Greetings Ben

P.S. 40kB seems a strong limitation for this mailing list




--=-WJr0hIj1Rpj4PaLopV9N
Content-Disposition: attachment; filename=adapter_binder.html.bz2
Content-Type: application/x-bzip; name=adapter_binder.html.bz2
Content-Transfer-Encoding: base64

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


--=-WJr0hIj1Rpj4PaLopV9N--