Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
#1

преобразование *this в std::shared_ptr - C++

12.11.2013, 23:32. Просмотров 475. Ответов 5
Метки нет (Все метки)

Доброго времени суток уважаемые форумчане.
у меня назрел такой вопрос, пишу программу в которой используется паттерн визитор и хотелось бы использовать умные указатели, но вот как передать в метод visit *this так и не понял, не судите строго=)
вот примерный код того что есть(это только малая часть.)
C++
1
2
3
4
void CCircle::Accept( IGeometryObjectSerializerVisitor const&  visitor,std::ofstream & strm ) const 
{
    visitor.Visit(*this , strm); 
}
C++
1
2
3
4
5
6
7
8
9
void CGeometryObjectToJSONSerializerVisitor::Visit( CCircle const& circle,std::ofstream & strm )
{//final
    strm << "   {\n     type: \"circle\",\n     " ;
 
    CPoint2D* pt = circle.GetCenter();
    WritePointInfo("center", pt, strm);
 
    strm << ",\n        radius: " << circle.GetRadius() << "\n  }" << std::endl;
}
заранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2013, 23:32     преобразование *this в std::shared_ptr
Посмотрите здесь:

Алгоритм std::find_end - аналог std::search_n C++
std::list - преобразование типов в контейнере C++
C++ std::async std::future и функции-члены
Отличие std::sort От std::qsort C++
C++ Shared_ptr не является членом std
C++ Shared_ptr
Std::shared_ptr - область применения C++
C++ Std::shared_ptr release pointer?
C++ Значение deleter в std::tr1::shared_ptr
Ошибка в std::cout<<std::endl C++
Lambda expressions only available with -std=c++11 or -std=gnu++11 C++
C++ Lambda expressions only available with -std=c++11 or -std=gnu++11

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
12.11.2013, 23:35     преобразование *this в std::shared_ptr #2
Pokemon_93, сделать метод Visit константным как минимум (т.к. visitor - ссылка на константу, то неконстантные методы вызывать нельзя).
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
12.11.2013, 23:36     преобразование *this в std::shared_ptr #3
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
хотелось бы использовать умные указатели, но вот как передать в метод visit *this так и не понял,
в визитера передать смарт-поинтер? std::enable_shared_from_this
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
12.11.2013, 23:44  [ТС]     преобразование *this в std::shared_ptr #4
Цитата Сообщение от gray_fox Посмотреть сообщение
Pokemon_93, сделать метод Visit константным как минимум (т.к. visitor - ссылка на константу, то неконстантные методы вызывать нельзя).
большое спасибо, на данном этапе проблема вроде решена.

Добавлено через 58 секунд
Цитата Сообщение от Jupiter Посмотреть сообщение
в визитера передать смарт-поинтер? std::enable_shared_from_this
про enable_shared_from_this читал, но к сожалению так и не понял как им пользоваться.=(
gray_fox
What a waste!
 Аватар для gray_fox
1252 / 1135 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
12.11.2013, 23:47     преобразование *this в std::shared_ptr #5
Цитата Сообщение от Pokemon_93 Посмотреть сообщение
про enable_shared_from_this читал, но к сожалению так и не понял как им пользоваться.=(
Просто наследоваться от него.

Добавлено через 1 минуту
По ссылке Jupiter есть код с примером.
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
13.11.2013, 00:25  [ТС]     преобразование *this в std::shared_ptr #6
Цитата Сообщение от gray_fox Посмотреть сообщение
Просто наследоваться от него.

Добавлено через 1 минуту
По ссылке Jupiter есть код с примером.
всем большое спасибо, вроде разобрался, проект компилится но на тестах вылетает ошибка, но это уже другая история=)
Yandex
Объявления
13.11.2013, 00:25     преобразование *this в std::shared_ptr
Ответ Создать тему
Опции темы

Текущее время: 16:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru