Re: [Boost-users] How to cast a boost::shared_ptr to void*
Sorry for the spam. I got the answer, how to do it. Ignore my previous mail. [quote] #include <boost/shared_ptr.hpp> #include <iostream> using namespace std; class A { public: void hello () { cout << "Hello, friends...!" << endl; } }; typedef boost::shared_ptr<A> APtr; void* callbk (void* o) { APtr a = *static_cast<APtr*>(o); a->hello(); } int main() { A* rawPtr = new A; boost::shared_ptr<A>sPtr(rawPtr); callbk((void*)&sPtr); return 0; } [/quote] warm regars, RV ________________________________ From: Mupparthy Ravindranath <rv_nath@yahoo.com> To: "boost-users@lists.boost.org" <boost-users@lists.boost.org> Sent: Tuesday, 10 May 2011 1:26 PM Subject: How to cast a boost::shared_ptr to void* Hi all, My requirement is to cast an object of type shared_ptr as void*, so that I can send it to a callback function that accepts a void*. I cannot change callback the function signature because it is part of an existing legacy code. In the existing code, I am sending a raw object pointer (instead of shared_ptr). Now, if I want to pass a shared_ptr, it won't compile because I cannot cast the shared ptr to void*. Can anyone suggest some workaround for this. I tried searching the mailing lists and internet, but not much luck. regards, RV
On Tue, May 10, 2011 at 9:54 AM, Mupparthy Ravindranath <rv_nath@yahoo.com>wrote:
Sorry for the spam. I got the answer, how to do it. Ignore my previous mail.
[quote] #include <boost/shared_ptr.hpp> #include <iostream> using namespace std;
class A { public: void hello () { cout << "Hello, friends...!" << endl; } };
typedef boost::shared_ptr<A> APtr;
void* callbk (void* o) { APtr a = *static_cast<APtr*>(o); a->hello(); }
int main() { A* rawPtr = new A; boost::shared_ptr<A>sPtr(rawPtr); callbk((void*)&sPtr); return 0; } [/quote]
Not like that! That passes the address of the shared pointer, not the address of your new'd object. If it works it's by luck! - R.
participants (2)
-
Mupparthy Ravindranath
-
Robert Jones