|
Boost : |
From: Felipe Magno de Almeida (felipe.m.almeida_at_[hidden])
Date: 2007-10-25 17:21:14
Has anybody read this?
On 10/16/07, Felipe Magno de Almeida <felipe.m.almeida_at_[hidden]> wrote:
> On 10/16/07, Felipe Magno de Almeida <felipe.m.almeida_at_[hidden]> wrote:
> > On 10/16/07, David Abrahams <dave_at_[hidden]> wrote:
>
> I probably wasn't clear enough. I'll try better now.
>
> [snip]
>
> > > > wnd_lock<text_box> text = create<text_box>( _parent = w, _pos =
> > > > std::make_pair(0, 0)
> > > > , text_box::_multi_line = true );
> > > >
> > > > Is it achievable?
> > >
> > > Sorry, it isn't clear from the above what you mean by "extended
> > > keywords?" Is it just the use of text_box:: qualification on
> > > _multi_line?
> >
> > No, I would like that my function would accept an unbound number of
> > keyword types.
> > _multi_line for example could be implemented by a third-party, and I
> > would like it to work with create<> function anyway.
>
> What I want is a way for users to define keywords which would work
> with my function.
> I have implemented something more or less like that, but it is more
> like another, yet very simple, named parameter concept. But it relies
> on passing a specific object type (that contains a boost::any).
> I would like that keywords and overload resolution could be
> implemented seperately and used inside that function. The function,
> being a template, could then adapt to what it received as arguments
> and parameters.
> It was like was defining that certain keywords would be obligatory,
> but all others (known or not known by the function) are optional.
> These keywords types could then implement a concept which would allow
> the named parameter function to use those parameters and arguments.
> Hope it is clearer now.
> So, is it possible with Boost.Parameter library?
>
>
>
> PS: What I have substituting this is having types that return an
> object of type 'expression'. Then through PP magic I have all numbers
> of parameters receiving expression objects and named parameters. But
> this way I can't template the whole function and leave duck-typing to
> after the create instantiation.
>
> So I have something like this:
>
> #define GUI_arguments(z, n, data) A ## n const& arg ## n
> #define GUI_create_extension_args(z, n, data) extension const&
> BOOST_PP_CAT(ext, n)
> #define GUI_extension_push_backs(z, n, data)
> extensions.push_back(BOOST_PP_CAT(ext, n));
>
> template <typename impl,
> BOOST_PP_ENUM_PARAMS(BOOST_PP_ADD(BOOST_PP_ITERATION(),1), typename
> A)>
> wnd_lock<impl> create(BOOST_PP_ENUM(BOOST_PP_ADD(BOOST_PP_ITERATION(),1),
> GUI_arguments, ~)
>
> #if BOOST_PP_ITERATION_1 != 0
> , BOOST_PP_ENUM(BOOST_PP_ITERATION_1, GUI_create_extension_args, ~)
> #endif
>
> , typename create_parameter::match<BOOST_PP_ENUM_PARAMS(BOOST_PP_ADD(BOOST_PP_ITERATION(),1),
> A)>::type const& args = create_parameter())
> {
> std::vector<extension> extensions;
>
> BOOST_PP_REPEAT(BOOST_PP_ITERATION_1, GUI_extension_push_backs, ~)
>
> return create_impl<impl>(args(BOOST_PP_ENUM_PARAMS(BOOST_PP_ADD(BOOST_PP_ITERATION(),1),
> arg)), extensions);
> }
>
>
> Where it iterates two times to have two counters. But I can't mix
> defined keywords and extension keywords this way.
>
> > > --
> > > Dave Abrahams
> > > Boost Consulting
> > > http://www.boost-consulting.com
>
>
>
> Thanks in advance,
> --
> Felipe Magno de Almeida
>
-- Felipe Magno de Almeida
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk