|
Boost : |
Subject: Re: [boost] Does boost help in creating generic function wrappers?
From: Andy Venikov (avenikov_at_[hidden])
Date: 2010-07-15 15:56:37
Steven Watanabe wrote:
>> Correct me if I'm wrong, but I think it's not going to work when the
>> inner functor has (T const &) parameter. If my wrapper declares
>> everything T &, then it won't be able to accept non-const rvalues
>> whereas the original functor was able to do that.
>
> If you use forward_adapter, you don't need to handle non-const rvalues.
> forward_adapter handles the overloading and passes const or non-const
> lvalues to your function object.
I don't think I follow.
Let's say that you have a functor f of type F, where it's
legal to call it like this:
int n = 5;
f(n, 10); //compiles fine
f(n, n); /compiles fine
You seem to suggest I create my own my_wrapper<F> and define an
operator() with only references:
template <typename Func>
class my_wrapper
{
....//ignore the problem of generating multiple operator()'s
//for different Func arity
template <typename T1, typename T2>
/*deduce ret type*/
operator() (T1 & in1, T2 & in2)
{
//Do something useful here
return func_(in1, in2);
}
};
... and then wrap it in a forward_adapter:
template <typename Func>
inline
forward_adapter<my_wrapper<Func> > wrap(Func const & in)
{
return forward_adapter<my_wrapper<Func> >(my_wrapper<Func>(in));
}
But now this fails to compile:
wrap(f)(n, 10); //Fails, because 10 is passed as int const &
whereas this used to compile fine:
f(n, 10);
What am I missing?
Thanks,
Andy.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk