Boost logo

Boost :

From: I Wei (i.c.code_at_[hidden])
Date: 2007-07-09 23:42:31


On 7/9/07, Daniel Walker <daniel.j.walker_at_[hidden]> wrote:
> On 7/8/07, I Wei <i.c.code_at_[hidden]> wrote:
> > On 7/9/07, Peter Dimov <pdimov_at_[hidden]> wrote:
> > > I Wei wrote:
> > >
> > > > With the boost::function<>::argN_type I can get boost::function's
> > > > argument type. How can I do with the boost::lambda_functor?
> > >
> > > You can't because there is no such thing. A lambda functor such as _1 + 2
> > > can accept (almost) any argument x for which x+1 makes sense. What are you
> > > trying to do?
> > >
> > This is my situation:
> [snip]
> >
> > template <typename T1, typename T2>
> > void func(int n, T2 f)
> > {
> > typedef typename T2::arg1_type arg1_type;
> >
> > getter<
> > boost::is_same<
> > arg1_type,
> > boost::shared_ptr<T1>
> > >::value
> > >do_get<T1, boost::function<void(arg1_type)> >(n, f);
> > }
> [snip]
> > But there are a
> > lot of similar calls with different second template argument, I want
> > the compiler deduce it by the caller function's actual argument. How
> > can I do that?
>
> I'm just guessing here (your example never actually invokes the lambda
> functor), but I think you want to change func above to something
> like...
>
> template <typename T1, typename T2>
> void func(T1 n, T2 f)
> {
> typedef T1 arg1_type;
> // ...
> }
>
> ... if you want to deduce the type of n.
>
> I am not sure that you need to use boost::function at all. Also, this
> seems like a very convoluted way of dispatching a function based on
> whether or not it's called with a smart pointer. Why not overload
> do_get for smart_pointer rather than specializing getter for the value
> of is_same?
>
> Daniel
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>

Dear Daniel,

The lambda_functor is do invoked, which is the return value of
boost::lambda::bind.
I thought I could use less template argument, if the compiler would
deduce the argument type of lambda_functor. And I think it is
impossible now. If the compiler can't deduce the argument type from a
function pointer, it should not be able to do on the lambda_functor.

Wei


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk