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

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

Восстановить пароль Регистрация
 
Pokemon_93
 Аватар для Pokemon_93
9 / 5 / 1
Регистрация: 19.01.2013
Сообщений: 74
12.11.2013, 23:32     преобразование *this в std::shared_ptr #1
Доброго времени суток уважаемые форумчане.
у меня назрел такой вопрос, пишу программу в которой используется паттерн визитор и хотелось бы использовать умные указатели, но вот как передать в метод 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;
}
заранее благодарен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
12.11.2013, 23:35     преобразование *this в std::shared_ptr #2
Pokemon_93, сделать метод Visit константным как минимум (т.к. visitor - ссылка на константу, то неконстантные методы вызывать нельзя).
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 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
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 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
Ответ Создать тему
Опции темы

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