Boost logo

Boost Users :

From: damien_at_[hidden]
Date: 2007-02-26 10:32:40


Yes, I know. If you mean this line:

msgargs.push_back(dref)

that's supposed to create a boost::any<double&> directly in the vector.
There's an example like that in the boost docs:

typedef std::list<boost::any> many;

void append_string(many & values, const std::string & value)
{
    values.push_back(value);
}

The argument to the message is a reference to a vector.

Damien

> 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_at_[hidden]> 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_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net