![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
igor_bogomolov |
![]()
Сообщение
#1
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Пытаюсь реализовать аналог Q_PROPERTY.
Раскрывающийся текст
Весь затык в том, что в базовый класс надо передать указатели на не статические методы классов потомков. Как можно решить эту проблему? Можно конечно для каждого метода делать,что-то вроде и передавать указатель уже этого методаНо тогда весь смысл в свойствах теряется. Как быть? Кто-нибудб делал что-то подобное. Может есть другой способ реализации PROPERTY? Сообщение отредактировал igor_bogomolov - 30.7.2009, 11:02 |
|
|
![]() |
BRE |
![]()
Сообщение
#2
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Посмотри на boost::bind.
|
|
|
igor_bogomolov |
![]()
Сообщение
#3
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Посмотри на boost::bind Все утро на него смотрю и на boost::ref, boost::mem_fn, boost::function.Ничего не получается. Не могу разобраться. Только начал разбираться с boost. Сложен он для меня ((( register_property("TEST",boost::bind(&base1::setTestProp), boost::bind(&base1::getTestProp)); Выдает кучу ошибок. Не пойму как переделать надо? Поможите, а? ))) |
|
|
BRE |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Ничего не получается. Не могу разобраться. Только начал разбираться с boost. Сложен он для меня ((( register_property("TEST",boost::bind(&base1::setTestProp), boost::bind(&base1::getTestProp)); Выдает кучу ошибок. Не пойму как переделать надо? Поможите, а? ))) Попробуй так: register_property( "TEST", boost::bind( &base1::setTestProp, this ), boost::bind( &base1::getTestProp, this ) ); |
|
|
igor_bogomolov |
![]()
Сообщение
#5
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
Выдает следущую ошибку
|
|
|
Влад |
![]()
Сообщение
#6
|
Участник ![]() ![]() Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: ![]() ![]() ![]() |
Посмотри, например, вот на это: http://www.progz.ru/forum/index.php?showtopic=27073&st=0
|
|
|
BRE |
![]()
Сообщение
#7
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Набросаю прямо здесь небольшой пример:
|
|
|
igor_bogomolov |
![]()
Сообщение
#8
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
cpp
вывод Цитата /usr/include/boost/bind/mem_fn.hpp: In member function ‘R& boost::_mfi: ![]() /usr/include/boost/bind/bind.hpp:236: instantiated from ‘R boost::_bi::list1<A1>::operator()(boost::_bi::type<R>, F&, A&, long int) [with R = bool (&)(int), F = boost::_mfi: ![]() /usr/include/boost/bind/bind_template.hpp:32: instantiated from ‘typename boost::_bi::result_traits<R, F>::type boost::_bi::bind_t<R, F, L>::operator()(A1&) [with A1 = int, R = bool (&)(int), F = boost::_mfi: ![]() /usr/include/boost/function/function_template.hpp:131: instantiated from ‘static R boost::detail::function::function_obj_invoker1<FunctionObj, R, T0>::invoke(boost::detail::function::function_buffer&, T0) [with FunctionObj = boost::_bi::bind_t<bool (&)(int), boost::_mfi: ![]() /usr/include/boost/function/function_template.hpp:904: instantiated from ‘void boost::function1<R, T1>::assign_to(Functor) [with Functor = boost::_bi::bind_t<bool (&)(int), boost::_mfi: ![]() /usr/include/boost/function/function_template.hpp:720: instantiated from ‘boost::function1<R, T1>::function1(Functor, typename boost::enable_if_c<boost::type_traits::ice_not::value, int>::type) [with Functor = boost::_bi::bind_t<bool (&)(int), boost::_mfi: ![]() /usr/include/boost/function/function_template.hpp:1040: instantiated from ‘boost::function<R ()(T0)>::function(Functor, typename boost::enable_if_c<boost::type_traits::ice_not::value, int>::type) [with Functor = boost::_bi::bind_t<bool (&)(int), boost::_mfi: ![]() main.cpp:129: instantiated from here /usr/include/boost/bind/mem_fn.hpp:342: error: invalid use of non-static member function Что я опять делаю не так ??? |
|
|
BRE |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Более подробный рабочий пример:
Раскрывающийся текст
|
|
|
igor_bogomolov |
![]()
Сообщение
#10
|
Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: ![]() ![]() ![]() |
BRE, спасибо огромнейшее. Все получилось.
![]() Осталось отвязаться от конкретных типов. Пока не понял что лучше использовать - boost::any или boost::variant ? Как обобщу, выложу готовый пример. Может еще кому пригодится ![]() ЗЫ. Тему лучше перенести в boost. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 1:50 |