Alternatively, you could store C++ buffers in your struct instead of 
std::vector objects. Then if you need to access your data with stl, just assign 
each buffer to an std::vector out from these buffers.

If you can't afford the extra copy performed by std::vector constructor, you'll 
need to implement your own wrapper class deriving from std::vector that nulls 
out the internal container upon destruction.
This is required to avoid std::vector to deallocate your buffer memory.

Of course I haven't tested this solution yet but it should work. :)

-mab

From: softimage-boun...@listproc.autodesk.com 
[mailto:softimage-boun...@listproc.autodesk.com] On Behalf Of Guillaume Laforge
Sent: Sunday, June 09, 2013 3:29 PM
To: softimage@listproc.autodesk.com
Subject: Re: [C++] Store a structure of vector in a UserData

Well, if you need the exact number of bytes, you will need to take into account 
the size of std::vector objects I think :).


On Sun, Jun 9, 2013 at 10:07 AM, Stephan Woermann 
<swoerman...@googlemail.com<mailto:swoerman...@googlemail.com>> wrote:
To get the total size of the struct, this should work:

Foo test;
sizeof( double ) * test.A.size() + sizeof( double ) * test.B.size() + sizeof( 
bool ) * 2
Stephan

2013/6/9 Guillaume Laforge 
<guillaume.laforge...@gmail.com<mailto:guillaume.laforge...@gmail.com>>
Hi Ahmidou :),

You could try to use pointers to std::vector. This way you will be able to 
access those vector and get the double values correctly.
But you must handle the allocation/deallocation of those vectors by yourself:

struct Foo{
    std::vector<double> *A;
    std::vector<double> *B;
    bool C;
    bool D;

    Foo()
    {
        A = new std::vector<double>;
        B = new std::vector<double>;
    }
    ~Foo()
    {
        delete A;
        delete B;
    }
};

Hope this help,

Guillaume

On Sun, Jun 9, 2013 at 8:07 AM, Ahmidou Lyazidi 
<ahmidou....@gmail.com<mailto:ahmidou....@gmail.com>> wrote:
Hi List,
Is it possible to store this kind of struct in a UserData (map or blob):

struct Foo{
    std::vector<double> A;
    std::vector<double> B;
    bool C;
    bool D;
};
I can pull out the structure, and the vectors have the good number of 
item...but they are empty, the values are gone

I'm not sure, but I think it's lost because of the size parameter in 
UserDataMap.PutItemValue
I tried to set the real size ( sizeof(vector)+ sizeof(double)*vector::size() ) 
but this gave me some crazy results.
Any idea?
Thanks

-----------------------------------------------
Ahmidou Lyazidi
Director | TD | CG artist
http://vimeo.com/ahmidou/videos
http://www.cappuccino-films.com



<<attachment: winmail.dat>>

Reply via email to