Аналог Q_PROPERTY |
Здравствуйте, гость ( Вход | Регистрация )
Аналог Q_PROPERTY |
igor_bogomolov |
30.7.2009, 10:58
Сообщение
#1
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Пытаюсь реализовать аналог Q_PROPERTY.
Раскрывающийся текст
Весь затык в том, что в базовый класс надо передать указатели на не статические методы классов потомков. Как можно решить эту проблему? Можно конечно для каждого метода делать,что-то вроде и передавать указатель уже этого методаНо тогда весь смысл в свойствах теряется. Как быть? Кто-нибудб делал что-то подобное. Может есть другой способ реализации PROPERTY? Сообщение отредактировал igor_bogomolov - 30.7.2009, 11:02 |
|
|
BRE |
30.7.2009, 11:41
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Посмотри на boost::bind.
|
|
|
igor_bogomolov |
30.7.2009, 11:54
Сообщение
#3
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Посмотри на boost::bind Все утро на него смотрю и на boost::ref, boost::mem_fn, boost::function.Ничего не получается. Не могу разобраться. Только начал разбираться с boost. Сложен он для меня ((( register_property("TEST",boost::bind(&base1::setTestProp), boost::bind(&base1::getTestProp)); Выдает кучу ошибок. Не пойму как переделать надо? Поможите, а? ))) |
|
|
BRE |
30.7.2009, 12:01
Сообщение
#4
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Ничего не получается. Не могу разобраться. Только начал разбираться с 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 |
30.7.2009, 12:13
Сообщение
#5
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
Выдает следущую ошибку
|
|
|
Влад |
30.7.2009, 12:16
Сообщение
#6
|
Участник Группа: Участник Сообщений: 146 Регистрация: 20.3.2009 Из: Санкт-Петербург Пользователь №: 627 Спасибо сказали: 46 раз(а) Репутация: 8 |
Посмотри, например, вот на это: http://www.progz.ru/forum/index.php?showtopic=27073&st=0
|
|
|
BRE |
30.7.2009, 12:20
Сообщение
#7
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Набросаю прямо здесь небольшой пример:
|
|
|
igor_bogomolov |
30.7.2009, 13:33
Сообщение
#8
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
cpp
вывод Цитата /usr/include/boost/bind/mem_fn.hpp: In member function ‘R& boost::_mfi:m<R, T>::operator()(T*) const [with R = bool ()(int), T = device]’: /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:m<bool ()(int), device>, A = boost::_bi::list1<int&>, A1 = boost::_bi::value<device*>]’ /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:m<bool ()(int), device>, L = boost::_bi::list1<boost::_bi::value<device*> >]’ /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:m<bool ()(int), device>, boost::_bi::list1<boost::_bi::value<device*> > >, R = bool, T0 = int]’ /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:m<bool ()(int), device>, boost::_bi::list1<boost::_bi::value<device*> > >, R = bool, T0 = int]’ /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:m<bool ()(int), device>, boost::_bi::list1<boost::_bi::value<device*> > >, R = bool, T0 = int]’ /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:m<bool ()(int), device>, boost::_bi::list1<boost::_bi::value<device*> > >, R = bool, T0 = int]’ main.cpp:129: instantiated from here /usr/include/boost/bind/mem_fn.hpp:342: error: invalid use of non-static member function Что я опять делаю не так ??? |
|
|
BRE |
30.7.2009, 13:50
Сообщение
#9
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
Более подробный рабочий пример:
Раскрывающийся текст
|
|
|
igor_bogomolov |
30.7.2009, 14:12
Сообщение
#10
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
BRE, спасибо огромнейшее. Все получилось.
Осталось отвязаться от конкретных типов. Пока не понял что лучше использовать - boost::any или boost::variant ? Как обобщу, выложу готовый пример. Может еще кому пригодится ЗЫ. Тему лучше перенести в boost. |
|
|
Текстовая версия | Сейчас: 22.11.2024, 20:52 |