Я пытаюсь освоиться с ASIO и подумал, что хорошим первым проектом будет простой веб-сканер: скачайте HTML-страницу, найдите в ней ссылки, скачайте все ссылки.
Я попытался изменить пример http-клиента ASIO, чтобы использовать enable_shared_from_this вместо необработанного указателя, чтобы я мог создавать новую асинхронную задачу из обработчика предыдущей задачи, не беспокоясь о том, что ресурсы будут удалены в середине моей работы.
Проблемы начинаются, когда я пытался создать подкласс своего клиента для обработки разных страниц по-разному. Компилятор жалуется, что тип shared_ptr не соответствует типу this
,
Кто-нибудь знает, как это решается? Я не смог понять это сам.
Это не связано с Асио.
Если вы унаследовали базовый класс от enable_shared_from_this
, но нужно в производном, используйте boost::static_pointer_cast
:
struct base : enable_shared_from_this<base>
{
};
struct derived : base
{
shared_ptr<derived> shared_from_derived()
{
return static_pointer_cast<derived>(shared_from_this());
}
};
Других решений пока нет …