Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Loki-like functors with boost::function?

Reply
Thread Tools

Loki-like functors with boost::function?

 
 
Martin Herbert Dietze
Guest
Posts: n/a
 
      03-30-2006
Hi,

in a project I am using callbacks which are called like
ordinary functions but in fact are Loki::Functor's
encapsulating calls to non-static member functions on instances
of different classes.

The approach using Loki::Functor looks like this:

| class X {
| public:
| void foo(int) { }
| };
|
| X x;
|
| typedef Loki::Functor<void, TYPELIST_1(int)> Functor1;
| Functor1 f1(&x, &X::foo);
|
| f1(42); // x disappears, f can be called like a function

The nice thing about it is you do not need to template the
actual type of the object on which you want to call the
member function.

Using boost::function1 and boost::bind you can come close to
this:

| template <class C, typename R, typename A1> class MyFunction
| : public boost::function1 <R, A1> {
| public:
| MyFunction(C *c, R (C::*f)(A1)) {
| boost::function1 <R, A1> t = boost::bind(f, c, _1);
| swap(t);
| }
| };
|
| template<class C>struct A {
| typedef MyFunction<C, void, int> f2(x, &X::foo) Functor2;
| };
|
| A::Functor2<X> f2(&x, &X::foo);

This does not only look more complicated, it is also less
flexible. While with Loki::Functor I can use my function object
on any member function of any class provided the signature
fits, my Functor2 template will only work with class X.

I would like to avoid this dependency since if using the
current boost-based approach I would have to make a large number
of classes using this functor class templates, too.

On the other hand I would like to reduce the number of
third-party libraries my project depends on, and from the
Loki package I am currently only using the Functor class, so
that I would actually prefer to replace its functionality by
something else.

Any idea?

Cheers,

Martin

--
Ruft man einen Hund, dann kommt er. Ruft man eine Katze, dann nimmt
sie das zur Kenntnis, und kommt gelegentlich darauf zurueck.
-=-=- -=-=-=-=- --=-=-
Martin Dietze -=-=- http://www.the-little-red-haired-girl.org
 
Reply With Quote
 
 
 
 
Jeff Flinn
Guest
Posts: n/a
 
      03-30-2006
Martin Herbert Dietze wrote:
> Hi,
>
> in a project I am using callbacks which are called like
> ordinary functions but in fact are Loki::Functor's
> encapsulating calls to non-static member functions on instances
> of different classes.
>
> The approach using Loki::Functor looks like this:
>
>> class X {
>> public:
>> void foo(int) { }
>> };
>>
>> X x;
>>
>> typedef Loki::Functor<void, TYPELIST_1(int)> Functor1;
>> Functor1 f1(&x, &X::foo);
>>
>> f1(42); // x disappears, f can be called like a function

>
> The nice thing about it is you do not need to template the
> actual type of the object on which you want to call the
> member function.
>
> Using boost::function1 and boost::bind you can come close to
> this:


Why not just:

typdef boost::function1<void,int> Functor1;

Functor1 f1( boost::bind( &x::for, &x ) );

f1(42);

Jeff


 
Reply With Quote
 
 
 
 
Martin Herbert Dietze
Guest
Posts: n/a
 
      03-30-2006
Jeff Flinn <(E-Mail Removed)> wrote:

> Why not just:
>
> typdef boost::function1<void,int> Functor1;
>
> Functor1 f1( boost::bind( &x::for, &x ) );
>
> f1(42);


This would add boost-specific code to dozens of modules
throughout the project. I would like to encapsulate this in a
class which does that magic for the user. However I have not
got around explicitly having to specify the class X as a
template argument.

Cheers,

Martin

--
There's only one serious question. And that is: Who knows how to make love stay?
Answer me that and I will tell you whether or not to kill yourself. Answer me
that and I will ease your mind about the beginning and the end of time. Answer
me that and I will reveal to you the purpose of the moon. -- Tom Robbins
-=-=- -=-=-=-=- --=-=-
Martin Dietze -=-=- http://www.the-little-red-haired-girl.org
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Deleting a map of pointers with functors Satish C++ 1 09-10-2004 01:40 AM
functors nsgi_2004 C++ 2 08-12-2004 07:35 AM
functors with reference parameters red floyd C++ 0 11-13-2003 12:50 AM
Re: Need help with generic functors.... Rob Williscroft C++ 3 08-17-2003 11:57 PM
Functors with behaviour in the destructor Paul MG C++ 2 07-03-2003 03:12 AM



Advertisments