![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
ExtensibilityBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 12. Boost.Foreach
|
![]() |
Tip |
---|---|
Хотя мы должны сказать< |
BOOST_FOREACH
for Lightweight Proxy Sequence Types
На некоторых компиляторах<BOOST_FOREACH
>иногда требуется несколько более медленный путь кода, чтобы гарантировать правильную обработку последовательностей, хранящихся во временных объектах. Он спрашивает себя: «Должен ли я сделать копию этого объекта?», а затем: «Я сделал копию или нет?» Для некоторых типов последовательностей это перебор. Рассмотрим последовательность, которая представляет собой простую пару итераторов. Прыгать через обручи огня, чтобы избежать копирования, не имеет смысла, потому что копирование очень дешево.
Пара итераторов является примером легкого прокси. Он не хранит значения последовательности; скорее, он хранит итераторы для них. Это означает, что повторение над копией прокси-объекта даст те же результаты, что и использование самого объекта. Для таких типов<BOOST_FOREACH
>обеспечивает крючок, который позволяет нам сказать ему, чтобы он не беспокоился о расходах на изготовление копии. Это может привести к немного более быстрому выполнению цикла. Просто специализируйте черту<boost::foreach::is_lightweight_proxy<>
>следующим образом:
struct sub_string : boost::iterator_range< std::string::iterator > { // ... }; namespace boost { namespace foreach { template<> struct is_lightweight_proxy< sub_string > : mpl::true_ { }; }}
С другой стороны, мы могли бы достичь того же эффекта, переопределив глобальную функцию<boost_foreach_is_lightweight_proxy()
>следующим образом:
// At global scope... inline boost::mpl::true_ * boost_foreach_is_lightweight_proxy( sub_string *&, boost::foreach::tag ) { return 0; }
Этот метод переносим на более старые компиляторы.
Статья Extensibility раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 12. Boost.Foreach может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 12. Boost.Foreach ::
реклама |