Boost logo

Boost :

From: Aleksey Gurtovoy (alexy_at_[hidden])
Date: 2002-01-29 19:40:03


David Abrahams wrote:
> I don't see how this is going to work. Once you pass a
> function pointer into a function call between parens
> (e.g. bind(&my::foo...)) it becomes a runtime
> entity, and is unavailable as a template parameter.

Oops, you are right of course. I didn't realize that non-type template
parameters cannot be deduced, e.g. that this won't work:

    template<
          typename R
        , typename T
        , R (T::*f)()
>
    mf0_slot<R, T, f>
    bind(f, T* obj) // declaration error
    {
        return mf0_slot<R, T, f>(obj);
    }

    struct my { void foo(); };

    int main()
    {
        my m;
        function0<int> f(bind(&my::foo, &m)); // won't work
    }

It's a shame :(. I guess, if you want this optimization, you just have to
write something like

    my m;
    function0<int> f(mf0<void, my, &my::foo>(&m));

Yuck!

>
> What am I missing?

Nothing, it's me who was thinking too fast :).

Aleksey


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