|
Boost : |
From: Alexander Nasonov (alnsn_at_[hidden])
Date: 2007-08-21 07:06:17
Steven Watanabe <steven <at> providere-consulting.com> writes:
>
> AMDG
>
> The local structs are not essential. You can
> use tuples.
I like this idea.
> I too would definitely like to see something like
>
> int main() {
>
> int i = 0;
>
> BOOST_LOCAL_FUNCTION(f, (i), (int, v)) {
> i = v;
> } BOOST_LOCAL_FUNCTION_END;
>
> f(2); // i = 2
>
> }
How about this?
int BOOST_LOCAL_FUNCTION( (v) ) (int i)
{
return v = i;
} BOOST_LOCAL_FUNCTION_END
You can think of it as if BOOST_LOCAL_FUNCTION macro invocation
has been expanded to local function name.
I'm not sure that it's possible in typeof emulation, though :(
Here is how this construction looks after preprocessing:
// Line 1.
int
(*sig_1)();
typedef typeof(v) typeof_v_1;
typedef boost::tuple<typeof_v_1&> tuple_t_1;
tuple_t_1 tuple_1(v);
{ // __LINE__ suffix can be omitted inside this block.
typedef typeof(sig_1()) result_t;
typedef tuple_t_1 tuple_t;
tuple_t& tuple = tuple_1;
struct scope_exit_body_t {
typeof_v_1& v;
scope_exit_body_t(tuple_t& tuple)
: v(tuple.get<0>())
{}
result_t
// Lines 2-5.
operator()(int i) const
{
return i = v;
}
// Line 6.
};
typedef typeof(&scope_exit_body_t::operator()) native_typeof_only;
}
> In Christ,
> Steven Watanabe
-- Alexander
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk