On Wed, 2003-03-19 at 21:56, Thomas Pfaff wrote:
> I think that the code could be simplified by making callback a pointer to
> member function.
>
> void forEach (void (ListNode::*callback) ())
> {
> ListNode *aNode = head;
> while (aNode)
> {
> (aNode->*callback) ();
> aNode = aNode->next;
> }
> }
>
> With this change you do not need a static to member wrapper function like
> pthread_key::saveAKey.
>
> You could write
>
> void pthread_key::fixup_before_fork()
> {
> keys.forEach (&pthread_key::saveKeyToBuffer);
> }
>
> void pthread_key::fixup_after_fork()
> {
> keys.forEach (&pthread_key::recreateKeyFromBuffer);
> }
>
> void pthread_key::runAllDestructors ()
> {
> keys.forEach (&pthread_key::runDestructor);
> }
>
> instead.For some reason, I forgot that I put in the 'poor mans generic programming' initially. It just stood out in the patch. Using a member pointer like that still requires each function to have the same signature. The for_each I sketched below allows arbitrary callbacks like using a member function does, but computes them at compile time which allows for more efficient binary output. Please apply your patch. Rob -- GPG key available at: <http://users.bigpond.net.au/robertc/keys.txt>.
signature.asc
Description: This is a digitally signed message part
