Форум программистов, компьютерный форум, киберфорум
Наши страницы

Boost C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
#1

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

18.01.2013, 18:42. Просмотров 3017. Ответов 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> &)'
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++):

Почему не дает shared_ptr от this? - C++
Здравствуйте. Вот проблемный код: OwnProject::OwnProject(OwnManager * Manager, const QString &amp; Filename) :...

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

boost/shared_ptr (Smart Pointers) - Boost C++
Допустим есть проект // // (---.Array_hpp---) // #ifndef Array_HPP // Preprocessor gates #define...

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

Не удаляется объект после уничтожения shared_ptr - Boost C++
Добрый день Не могу понт почему так происходит? class Widget { public: void sayHello(){ cout &lt;&lt; &quot;Hello!\n&quot;; ...

Отличие std::auto_ptr<SomeType> от boost::shared_ptr<SomType> - Boost C++
Господа программисты, хочу задать вам вопрос: чем умный указатель std::auto_ptr&lt;SomeType&gt; отличается от бустового умного указателя...

27
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
21.01.2013, 14:44 #16
мдя.... почитайте основы, будет в разы проще

C++ (Qt)
1
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION),Release_hge);
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 16:02  [ТС] #17
Цитата Сообщение от l_a_m Посмотреть сообщение
почитайте основы, будет в разы проще
Основы чего простите? Я проштудировал кучу учебников и вроде как ушел от основ. Мне кажется основы должны быть разъяснены в учебниках для начинающих, но из таких учебников я мало что смогу выловить!


Цитата Сообщение от l_a_m Посмотреть сообщение
boost::shared_ptr<HGE> hge(hgeCreate(HGE_VERSION),Release_hge);
- если вы про то что тут присутствует ошибка это понятно даже форумчанину, но если есть понимания подскажите как правильно, если конечно оно есть...
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
21.01.2013, 18:08 #18
Цитата Сообщение от vbloodv Посмотреть сообщение
то что тут присутствует ошибка это понятно даже форумчанину
разъясните пожалуйста, какая же тут ошибка? ибо я под данной строкой подразумевал таки ответ на ваш предыдущий вопрос
а под основами я подразумевал наверное чистый Си.
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 18:49  [ТС] #19
Цитата Сообщение от l_a_m Посмотреть сообщение
разъясните пожалуйста, какая же тут ошибка?
Я подразумевал хотя бы в том что в функцию в которой в прототипе указанна явная передача хотя бы одного параметра ничего не передается, если это указывать не надо, то я действительно чего то не понимаю, но мне кажется это относится к спецификиции Boost'a.

Цитата Сообщение от l_a_m Посмотреть сообщение
а под основами я подразумевал наверное чистый Си.
Каким главам стоит уделить больше внимания, хотя бы парочку?
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
21.01.2013, 19:16 #20
vbloodv, Да как бэ это обычный указатель на функцию. И это действительно основы.
1
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
21.01.2013, 21:42  [ТС] #21
Цитата Сообщение от ForEveR Посмотреть сообщение
vbloodv, Да как бэ это обычный указатель на функцию. И это действительно основы.
Да, что-то я сглупил. Я знаю, что такое указатель на функцию. Работал с Callback функциями и делал свои. Просто указатель на функцию как параметр принимается определенного типа, в новой для меня теме мозг отказывался принять то что это void Release_hge(HGE *ptr) как никак должна же быть перегрузка для деструкторов и т.д. по аналогии с предикатом для сортировки.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 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 / 0
Регистрация: 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
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
23.01.2013, 17:12 #24
vbloodv, Ну да, получается в случае, если this передается через параметр - сработает. А если через регистры - нет
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
23.01.2013, 21:12  [ТС] #25
ForEveR, Пожалуйста дай лик.без. по использованию умных указателей для интерфейсов. Я не понимаю что значит регистры
0
Maxim Prishchepa
Эксперт С++
1923 / 1035 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
24.01.2013, 14:17 #26
а причем тут умные указатели? это голая теория С++а
0
vbloodv
22 / 22 / 0
Регистрация: 15.12.2012
Сообщений: 314
24.01.2013, 23:00  [ТС] #27
l_a_m, Не это было два отдельных вопроса )))
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Указатель в классе, указывающий на этот же класс - C++
Разбирал чужой код и нашел примерно такую конструкцию: class Sample { public: Sample(); virtual ~Sample(); int Method();...

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

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


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

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

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