Как включить boost:: shared_ptr <> в ссылку (&)?

Итак, у меня есть класс, который использует ссылки (&) с такими функциями, как

void request(tcp::socket& socket); 

Я начинаю переносить весь свой код на boost::shared_ptr<tcp::socket>, но мне бы очень хотелось узнать, как превратить мои shared_ptrs в ссылки, чтобы быть способным сделать мой код развитым функцией по функциям, а не на одной итерации, меняющей все, что у меня есть shared_ptr. Итак, как превратить shared_ptr в ссылку?

Ответ 1

Во-первых, они не называются ссылками, а ссылками.:)
Во-вторых, boost::shared_ptr можно просто разыменовать как обычный указатель:

boost::shared_ptr<tcp::socket> p(new tcp::socket());
// can be done in two steps (dereference, pass)
tcp::socket& socket_ref = *p;
request(socket_ref);
// or one step
request(*p);
//      ^ -- dereference the shared_ptr

Ответ 2

boost::shared_ptr<tcp::socket> sock;

...

if (sock) request( *sock )

Я думаю, что лучше переписать request() (если можно), чтобы он мог обрабатывать boost::shared_ptr или общие указатели.