конвертирование boost shared_ptr в void * и наоборот - PullRequest
8 голосов
/ 10 мая 2011

Могу ли я преобразовать boost shared_ptr в void* и обратно в boost::shared_ptr?Мне это нужно, потому что мне нужно передать общий указатель и функцию обратного вызова в функцию таймера, реализованную в C. И при обратном вызове мне нужно преобразовать указатель void* обратно в boost:shared_ptr.Это дало мне ошибки.

Я попробовал то же самое с примером программы.

#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;

class A
{

public:

    void f1() { cout<<"function f\n"; }
     inx aa;

private:
};

void f2 (void *arg) {

    boost::shared_ptr<A> b =  ( boost::shared_ptr<A> *)(arg);  //How to do this
}

int main ()
{
  boost::shared_ptr<A> a (new A());
  //void * ptr = (void *) &a;
  f2( (&a));

  return 0;
}

Можно ли это сделать с помощью boost::shared_ptr?

Ответы [ 2 ]

14 голосов
/ 10 мая 2011

Просто еще одна звездочка:

boost::shared_ptr<A> b = *(boost::shared_ptr<A>*)(arg);
3 голосов
/ 10 мая 2011
boost::shared_ptr<A> *b =  ( boost::shared_ptr<A> *)(arg);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...