Форум
C/C++
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, maxis11, Вы писали: M>Здравствуйте, Warturtle, Вы писали: W>>Здравствуйте, maxis11, Вы писали: M>>>Здравствуйте, Кодт, Вы писали: К>>>>Здравствуйте, maxis11, Вы писали: M>>>>>Проблема заключается в том, что функцию, которую нужно передать в поток, находится в классе, и к сожалению её нельзя обозначить как static К>>>>Как насчёт посмотреть в сторону boost::thread ? Там удобная интеграция с bind и function. К>>>>Чтобы не руками писать переходник, как уже посоветовали выше. M>>>Спасибо, посмотрю, хотя если честно я как то сторонними библиотеками не очень то люблю пользоваться, но если порекомендовали, почему бы и нет... W>>Кстати, boost::bind и boost::function полезны не только из-за интеграции с boost::thread - они хорошо годятся еще например для написания собственных функций перебора, принимающих "делегат" для каждого элемента. Если в сишном стиле это может выглядеть так: W>>[ccode] W>>typedef bool (* ItemCallback)(ItemT item, void * data); W>>void EnumItems(ItemCallback cb, void * data) W>>{ W>> ... W>> for (...) { W>> if (!cb(item, data)) W>> break; W>> } W>> ... W>>} W>>... W>>bool ItemAction(ItemT item, void * pdata) W>>{ W>> ... W>> DataT * data = *static_cast< DataT * >(pdata); W>> ... W>>} W>>... W>>DataT data(p1, p2); W>>EnumItems(&ItemAction, &data); W>>[/ccode] W>>то bind и function позволяют избавиться от "нетипобезопасной" упаковки-распаковки параметров: W>>[ccode] W>>typedef boost::function< bool (ItemT item) > ItemCallback; W>>void EnumItems(ItemCallback cb) W>>{ W>> ... W>> for (...) { W>> if (!cb(item)) W>> break; W>> } W>> ... W>>} W>>... W>>bool ItemAction(ItemT item, Param1T p1, Param2T & p2) W>>{ W>> ... W>>} W>>... W>>ItemCallback const & cb = boost::bind(&ItemAction, _1, p1, boost::ref(p2)); W>>EnumItems(cb); W>>[/ccode] W>>Да и вообще, бывает, что с ними можно писать меньше шаблонного кода (понятно, что нужные делегаты будут генерироваться по шаблону внутри function и bind, но в клиентской программе они точно будут меньше мозолить глаза=)). M>Всё хорошо, но я никак не могу собрать boost Libraries (1.49) :)) как придумаю, как собрать либы, буду идти от простого к сложному, постепенно добавлять\заменять на более оптимальный вариант, ну всё, всем спасибо большое :) тему можно закрывать
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …