error: no match for 'operator=' in '((TimeBlock*)this)->TimeBlock::sec = boost::chrono::operator-(const boost::chrono::time_point<Clock, Duration1>&, const boost::chrono::time_point<Clock, Duration2>&) [with Clock = boost::chrono::steady_clock; Duration1 = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >; Duration2 = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >; typename boost::common_type<Duration1, Duration2>::type = boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >](((const boost::chrono::time_point<boost::chrono::steady_clock>)(&((TimeBlock*)this)->TimeBlock::prestart)))'
Это же очевидно как решать!
candidate is:
In file included from /usr/include/boost/chrono/chrono.hpp:11:0,
from /usr/include/boost/chrono/include.hpp:15,
from /usr/include/boost/chrono.hpp:17
/usr/include/boost/chrono/duration.hpp:453:19: note: boost::chrono::duration<Rep, Period>& boost::chrono::duration<Rep, Period>::operator=(const boost::chrono::duration<Rep, Period>&) [with Rep = long long int; Period = boost::ratio<1ll, 1000ll>; boost::chrono::duration<Rep, Period> = boost::chrono::duration<long long int, boost::ratio<1ll, 1000ll> >]
/usr/include/boost/chrono/duration.hpp:453:19: note: no known conversion for argument 1 from 'boost::common_type<boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >, boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >, void>::type {aka boost::chrono::duration<long long int, boost::ratio<1ll, 1000000000ll> >}' to 'const boost::chrono::duration<long long int, boost::ratio<1ll, 1000ll> >&'
boost.org . Вот точно, быстрее свою библиотеку парсеров сделать чем в этом говне разобраться.
в spirit2 уничтожили вообще всю документацию нахуй. Вот всё что есть про обработку ошибок, не считая исходников: support.highscreen.org
Что нового:
Обновление содержит в себе все дополнения и правки предыдущих версий.
Повышена общая стабильность работы системы.
Скорректировано отображение оперативной памяти устройства.
Внимание:
Данная прошивка не предназначена для устройств Rev.B! Установка этой прошивки на Boost Rev.B может привести к выходу аппарата из строя. В случае обнаружения в сервисном центре того, что причиной некорректной работы устройства стала установка этой прошивки наHighscreen Boost Rev.B – такой случай будет признан не гарантийным и ремонт будет производиться за счет владельца аппарата.
Принадлежность аппарата к Rev.B указана на наклейке под аккумуляторным отсеком
Сцуки. Раньше нельзя было сказать что 28B это только для урезанной версии.
пример использования
boost::function<bool()> f = functor<bool(), predicate, false);
Тестирую на своем каталоге с исходниками, размер которого 936 МБ в котором 40 217 файлов и 4146 каталогов. Программа обходит рекурсивно указанную папку и создает md5-хэш для каждого файла и каталога на основе его содержимого. В качестве данных для хэширования каталога, я решил использовать хэши его файлов/каталогов.
Для указанного мной ранее каталога, это заняло 15 мин. и 44 сек.
Компилировал без оптимизации, разве что -s :3
Для того же самого каталога, но с -O3 и -Os, это заняло 15 мин. 39 сек.
И наконец, просто с -O2 это заняло 15 мин. 27 сек
Пока без поддержки многоядерности. Посему наблюдается лишь 50% заргузки на моем ноуте.
Потребление памяти не замерял, но точно менее 10МБ.
Достаточно неплохие результаты на мой взгляд, буду продолжать работать в этом направлении :)
вопрос: как сказать SCons'у где искать boost-libs?
P.S.: в Arch Linux всё собирается boost-libs 1.48 в Арче и во FreeBSD, SCons 2.1.0, swiften из git.
boost.org
а кто мне скажет как таким же замечательным кросс-платформенным методом получить те самые имена всех доступных портов в системе?
[806] boost::multi_index::multi_index_container<std::pair<std::string const, boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, boost::multi_index::indexed_by<boost::multi_index::sequenced<boost::multi_index::tag<mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na> >, boost::multi_index::ordered_non_unique<boost::multi_index::tag<boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> >::subs::by_name, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, boost::multi_index::member<std::pair<std::string const, boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >, std::string const, &(std::pair<std::string const, boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > >::first)>, std::less<std::string> >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, std::allocator<std::pair<std::string const, boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > > > >::insert_(std::pair<std::string const, boost::property_tree::basic_ptree<std::string, std::string, std::less<std::string> > > const&)
Шаблонные шаблонные параметры это прошлый век, они не удобны. Есть способы их избегать. Например: есть класс A, в котором нужно объявлять контейнер из произвольного типа, а тип контейнера передавать параметром шаблона: template <typename T, typename Container> struct A { typedef Container<T> type; }; Но так как Container это шаблон, принимающий два параметра: тип данных и тип аллокатора, то следует писать так: template <typename T, template<typename, typename> class Container> struct A { typedef Container<T, std::allocator<T> > type; } Но я не охочу указывать явно и самостоятельно тип аллокатора, это может првести к ошибке. Чтобы получить тип теперь мы должны вызвать: typedef A<int, std::vector>::type type; В boost mpl есть плейсхолдеры, которые используются для создания лямбда метафункций. С помощью них можно избежать создания шаблонных шаблонных параметров. То есть я передаю в шаблон A уже инстанцированный шаблон так: typedef A<int, std::vector<boost::mpl::_1> >::type type; Тогда в шаблоне A инстанцирование конейнера с произвольным типом будет выглядеть так: #include <boost/mpl/apply.hpp> template <typename T, typename Container> struct A { typedef boost::mpl::lambda<Container> lambda; typedef typename boost::mpl::apply<lambda, T>::type type; };
Только сейчас обнаружил для себя BOOST_AUTO (#include <boost/typeof/std/utility.hpp>), например, перебирать итераторы можно вместо громоздкого for (std::map<int, int>::const_iterator iter = a.begin(); iter != a.end(); ++iter) так: for (BOOST_AUTO(iter, a.begin()); iter != a.end(); ++iter)
Продолжение следует.
одно работает только под windows, другое только под unix, есть ешё hp-ux, под ним вообще ничего не работает.
for(directory_iterator it = directory_iterator(path); it != directory_iterator(); it++)
{
//paths.insert(fileMd5(it), it->path().filename());
//cout << it->path().filename();
}
Говорит, что expected primary expression перед скобками в for.
ЧЯДНТ?
Помилка: boost-serialization-1.47.0-3.fc16.i686 != boost-serialization-1.47.0-4.fc16.x86_64спасибо, капитан.
а вообще, да буст не ставится, какие-то зависимости поломатые.