Совместное проживание в boost :: shared_ptr и std :: shared_ptr

Я хочу использовать boost::log в какой-то момент, но я не могу пройти std::shared_ptr в качестве параметра, потому что компилятор (VS2010) не может преобразовать его в boost::shared_ptr,

Мне не очень нравится тот факт, что они чужды друг другу.

Есть ли безопасный и прозрачный способ конвертировать одно в другое, чтобы они не натыкались друг на друга?

Я не думаю, что это дубликат этот вопрос что состояния оба одинаковы.

42

Решение

Вы можете сделать это так:

template<typename T>
boost::shared_ptr<T> make_shared_ptr(std::shared_ptr<T>& ptr)
{
return boost::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

template<typename T>
std::shared_ptr<T> make_shared_ptr(boost::shared_ptr<T>& ptr)
{
return std::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}

РЕДАКТИРОВАТЬ: Обратите внимание, что это не работает со слабыми ссылками на источник ptr. Так что будьте осторожны с этим!

72

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]