Демонстрирует версию<std::copy>, которая использует<has_trivial_assign>, чтобы определить, следует ли использовать<memcpy>для оптимизации работы с копией (см.copy_example.cpp).:
//// opt::copy// same semantics as std::copy// calls memcpy where appropriate.//namespacedetail{template<typenameI1,typenameI2,boolb>I2copy_imp(I1first,I1last,I2out,constboost::integral_constant<bool,b>&){while(first!=last){*out=*first;++out;++first;}returnout;}template<typenameT>T*copy_imp(constT*first,constT*last,T*out,constboost::true_type&){memmove(out,first,(last-first)*sizeof(T));returnout+(last-first);}}template<typenameI1,typenameI2>inlineI2copy(I1first,I1last,I2out){//// We can copy with memcpy if T has a trivial assignment operator,// and if the iterator arguments are actually pointers (this last// requirement we detect with overload resolution)://typedeftypenamestd::iterator_traits<I1>::value_typevalue_type;returndetail::copy_imp(first,last,out,boost::has_trivial_assign<value_type>());}
Статья An Optimized Version of std::copy раздела Chapter 1. Boost.TypeTraits Examples может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.