Форум программистов, компьютерный форум, киберфорум
Наши страницы
Boost C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
#1

shared_ptr указывающий на интерфейс? - Boost C++

18.01.2013, 18:42. Просмотров 3110. Ответов 27
Метки нет (Все метки)

Возможно ли вот так:
C++
1
2
boost::shared_ptr<HGE> hge; // хочется вот так
HGE * hge; // вместо
Мнение компилятора на всё это следующее:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'HGE *' (or there is no acceptable conversion)
E:\Source\VisualStudio2008\Project\Phenomen\Phenomen\Source\boost/smart_ptr/shared_ptr.hpp(309): could be 'boost::shared_ptr<T> &boost::shared_ptr<T>::operator =(const boost::shared_ptr<T> &)'
http://www.cyberforum.ru/cpp/thread1371366.html
with
[
T=HGE
]
while trying to match the argument list '(boost::shared_ptr<T>, HGE *)'
with
[
T=HGE
]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2013, 18:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос shared_ptr указывающий на интерфейс? (Boost C++):

Помогите разобраться с boost::shared_ptr
shared_prt хранит указатель на динамически создаваемый объект и гарантирует,...

boost/shared_ptr (Smart Pointers)
Допустим есть проект // // (---.Array_hpp---)...

Не удаляется объект после уничтожения shared_ptr
Добрый день Не могу понт почему так происходит? class Widget { public:...

Как определить тип указателя shared_ptr<T>?
Прошу не удалять, в с++ для начинающих не смогли мне ответить есть классы: ...

Отличие std::auto_ptr<SomeType> от boost::shared_ptr<SomType>
Господа программисты, хочу задать вам вопрос: чем умный указатель...

27
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 21:42  [ТС] #21
Цитата Сообщение от ForEveR Посмотреть сообщение
vbloodv, Да как бэ это обычный указатель на функцию. И это действительно основы.
Да, что-то я сглупил. Я знаю, что такое указатель на функцию. Работал с Callback функциями и делал свои. Просто указатель на функцию как параметр принимается определенного типа, в новой для меня теме мозг отказывался принять то что это void Release_hge(HGE *ptr) как никак должна же быть перегрузка для деструкторов и т.д. по аналогии с предикатом для сортировки.
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
22.01.2013, 19:31 #22
К слову можно сделать проще и не писать доп. функции.
Насколько я понимаю так вполне будет работать.

C++
1
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION), boost::bind(&HGE::Release, _1));
1
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.01.2013, 00:09  [ТС] #23
Цитата Сообщение от ForEveR Посмотреть сообщение
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION), boost::bind(&HGE::Release, _1));
Уровень !!! Ты гуру...
Ошибка:
Кликните здесь для просмотра всего текста

e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(342) : error C2298: 'return' : illegal operation on pointer to member function expression

При нажатии на ошибку переходит:
C++
1
2
3
4
5
6
    explicit dm(F f): f_(f) {}
 
    R & operator()(T * p) const
    {
        return (p->*f_); // в эту часть кода
    }
Но объявление смотрится эффектно !

Добавлено через 6 минут
Вот собственно всё что есть:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1>------ Build started: Project: Phenomen, Configuration: Debug Win32 ------
1>Compiling...
1>Phenomen.cpp
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(318) : warning C4180: qualifier applied to function type has no meaning; ignored
1>        e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\bind_template.hpp(344) : see reference to class template instantiation 'boost::_mfi::dm<R,T>' being compiled
1>        with
1>        [
1>            R=void (void),
1>            T=HGE
1>        ]
1>        e:\source\visualstudio2008\project\phenomen\phenomen\source\phenomen.cpp(4) : see reference to class template instantiation 'boost::_bi::bind_t<R,F,L>' being compiled
1>        with
1>        [
1>            R=void (__stdcall &)(void),
1>            F=boost::_mfi::dm<void (void),HGE>,
1>            L=boost::_bi::list1<boost::arg<1>>
1>        ]
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(326) : warning C4180: qualifier applied to function type has no meaning; ignored
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(331) : warning C4180: qualifier applied to function type has no meaning; ignored
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(345) : warning C4180: qualifier applied to function type has no meaning; ignored
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(350) : warning C4180: qualifier applied to function type has no meaning; ignored
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(362) : warning C4180: qualifier applied to function type has no meaning; ignored
1>e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(342) : error C2298: 'return' : illegal operation on pointer to member function expression
1>        e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\mem_fn.hpp(341) : while compiling class template member function 'void (__stdcall &boost::_mfi::dm<R,T>::operator ()(T *) const)'
1>        with
1>        [
1>            R=void (void),
1>            T=HGE
1>        ]
1>        e:\source\visualstudio2008\project\phenomen\phenomen\source\boost\bind\bind_template.hpp(344) : see reference to class template instantiation 'boost::_mfi::dm<R,T>' being compiled
1>        with
1>        [
1>            R=void (void),
1>            T=HGE
1>        ]
1>        e:\source\visualstudio2008\project\phenomen\phenomen\source\phenomen.cpp(4) : see reference to class template instantiation 'boost::_bi::bind_t<R,F,L>' being compiled
1>        with
1>        [
1>            R=void (__stdcall &)(void),
1>            F=boost::_mfi::dm<void (void),HGE>,
1>            L=boost::_bi::list1<boost::arg<1>>
1>        ]
1>Build log was saved at "file://E:\Source\VisualStudio2008\Project\Phenomen\Phenomen\.solution\Debug\Build\BuildLog.htm"
1>Phenomen - 1 error(s), 6 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
0
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
23.01.2013, 17:12 #24
vbloodv, Ну да, получается в случае, если this передается через параметр - сработает. А если через регистры - нет
0
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
23.01.2013, 21:12  [ТС] #25
ForEveR, Пожалуйста дай лик.без. по использованию умных указателей для интерфейсов. Я не понимаю что значит регистры
0
Maxim Prishchepa
Эксперт С++
1924 / 1036 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
24.01.2013, 14:17 #26
а причем тут умные указатели? это голая теория С++а
0
vbloodv
22 / 22 / 3
Регистрация: 15.12.2012
Сообщений: 314
24.01.2013, 23:00  [ТС] #27
l_a_m, Не это было два отдельных вопроса )))
0
fasked
Эксперт С++
4976 / 2556 / 241
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
26.01.2013, 10:14 #28
Цитата Сообщение от vbloodv Посмотреть сообщение
Пожалуйста дай лик.без. по использованию умных указателей для интерфейсов
Использование умных указателей для интерефейсов ничем не отличается от использования умных указателей.
http://www.boost.org/doc/libs/1_52_0/libs/smart_ptr/shared_ptr.htm
0
26.01.2013, 10:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.01.2013, 10:14
Привет! Вот еще темы с решениями:

Скрипт указывающий путь
Нужен скрипт, который будет отсылать свой путь, т.е где находится сам скрипт на...

Указатель в классе, указывающий на этот же класс
Разбирал чужой код и нашел примерно такую конструкцию: class Sample {...

Google Maps указывающий на адрес моей компании
Здраствуйте, делаю сайт (на html) и во вкладке КОНТАКТЫ хочу прикрепить карту...

Выступ за пределы блока, указывающий на ячейку его вызвавшую
Как грамотно сделать такой вот блок с выступом, указывающим на ячейку, клик по...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru