|
Boost Users : |
From: Dave Nay (dave.nay_at_[hidden])
Date: 2007-02-14 17:37:26
Hi All!
I am using a third party library where I enqueue a series of events. Each
of these events allows the passing of a user context void*. I am attempting
to pass the address of a boost::shared_ptr as my context.
typedef boost::shared_ptr<CBuffer> CBufferPtr;
for (i = 0; i < PREQUEUESIZE; i++)
{
handle = RegisterBuffer(buffer->m_pBCAMBuffer, m_AOISize);
QueueBuffer( handle, &buffer ); // The second parameter is a
void* user context data
}
In the above code "buffer" is my shared_ptr.
Later, in my event handler I have the following:
CBufferPtr buffer = static_cast<CBufferPtr>(result.Context());
This does not compile due to the following error in VS2005:
1>c:\boost\include\boost-1_33_1\boost\shared_ptr.hpp(125) : error C2440:
'initializing' : cannot convert from 'const void *' to 'CBuffer *'
1> Conversion from 'void*' to pointer to non-'void' requires an
explicit cast
1> d:\sourcecode\test.cpp(1572) : see reference to function template
instantiation 'boost::shared_ptr<T>::shared_ptr<const void>(Y *)' being
compiled
1> with
1> [
1> T=CBuffer,
1> Y=const void
1> ]
The problem seems to be that the third party library call to
result.Context() is returing a const void*. It also seems to me that my
handler code is actually executing the overloaded operator=, and can never
actually cast from a void* to a shared_ptr<T>.
What can I do to successfully cast a void* to a shared_ptr<T>?
Thanks,
Dave
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