|
Boost : |
From: Mårten Rånge (marten.range_at_[hidden])
Date: 2004-04-15 11:17:46
Personally, I'd prefer to have it the way it is.
>From a maintenance engineer's perspective I prefer this:
static void f( std::string & s )
{
std::cout << s;
std::string().swap(s);
}
void do_stuff()
{
std::string l_yo("yo");
boost::bind(
f,
boost::ref(l_yo))();
}
Imagine this being a huge project. It's a tough job for a maintenance
engineer (that's me) to grasp it all. By seeing boost::ref I understand that
f receives a non-const reference to l_yo. It might be modified during the
call to f. Of course I could understand that by just checking out of f. But
the advantage here is that I see where the call is made that l_yo might be
modified by f.
As I'm sure you all are aware of in C# when you specify a function like this
void do_stuff(ref int i)
{
++i;
}
You have to call it like this:
int l_i = 4233;
do_stuff(ref l_i);
You see at the place the call is made that l_i might be modified by
do_stuff. I would love to have that in C++. Could you design the arguments
of a function so that the compiler requires you to write something like
this?
// declaration
void do_stuff( boost::requires_ref<int> i );
// works fine
do_stuff(boost::ref(i));
// compilation error
do_stuff(i);
Mårten
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk