Демонстрирует версию<std::fill>, которая использует<has_trivial_assign>для определения того, использовать ли<memset>для оптимизации операции заполнения (см.fill_example.cpp).:
//// fill// same as std::fill, but uses memset where appropriate//namespacedetail{template<typenameI,typenameT,boolb>voiddo_fill(Ifirst,Ilast,constT&val,constboost::integral_constant<bool,b>&){while(first!=last){*first=val;++first;}}template<typenameT>voiddo_fill(T*first,T*last,constT&val,constboost::true_type&){std::memset(first,val,last-first);}}template<classI,classT>inlinevoidfill(Ifirst,Ilast,constT&val){//// We can do an optimised fill if T has a trivial assignment // operator and if it's size is one://typedefboost::integral_constant<bool,::boost::has_trivial_assign<T>::value&&(sizeof(T)==1)>truth_type;detail::do_fill(first,last,val,truth_type());}
Статья An Optimised Version of std::fill раздела Chapter 1. Boost.TypeTraits Examples может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.