Hi,

There's no such thing as a vector (or any other container) of references. Try this and see how the compiler reacts: vector<int &> v;

Jan

On 2/26/07, Damien <damien@khubla.com> wrote:
Hi all,

I've been trying out boost::any in a messaging system to package up function arguments.  A message
call is basically

Message::Call(std::vector<boost::any>& args)
{
try
...a few any_cast<..>
...fire the actual function...
catch
...etc
}

It's all good, except for one niggling problem.  Say I have a double-precision value that I need
changed inside the message, so it needs to be passed as a double* or a double& in an argument.  The
problem is, if I create a double& inside a boost::any, it doesn't point to the right memory location
once I'm inside the message, and it looks like it's copying the original dereferenced value and
giving me a reference to the copy.  If I create a double* inside a boost::any, I get a new pointer
inside the message like the reference, but because the pointer target is correct everything works.
The code looks like this:

...
...
std::vector<boost::any> args;
double d = 1.5;
double* dptr = &d;
msgargs.push_back(dptr);//works fine...
double& dref = d;
msgargs.push_back(dref);//seems to copy d instead of a reference to d...
...
msg->Call(args);
...

I can live with this, I just have to pass "large" objects by pointer so they don't get copied.  BUT:
  Can anyone tell me why references are creating a copy of the original and not a copy of the
reference, or how I could avoid the copying?  Or am I doing something dumb?

Damien
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users