Создание нового асинхронного запроса от обработчика asio

Я пытаюсь освоиться с ASIO и подумал, что хорошим первым проектом будет простой веб-сканер: скачайте HTML-страницу, найдите в ней ссылки, скачайте все ссылки.

Я попытался изменить пример http-клиента ASIO, чтобы использовать enable_shared_from_this вместо необработанного указателя, чтобы я мог создавать новую асинхронную задачу из обработчика предыдущей задачи, не беспокоясь о том, что ресурсы будут удалены в середине моей работы.

Проблемы начинаются, когда я пытался создать подкласс своего клиента для обработки разных страниц по-разному. Компилятор жалуется, что тип shared_ptr не соответствует типу this,

Кто-нибудь знает, как это решается? Я не смог понять это сам.

1

Решение

Это не связано с Асио.

Если вы унаследовали базовый класс от 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());
}
};
2

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

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

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