1[/ 2 Copyright (c) Vladimir Batov 2009-2016 3 Distributed under the Boost Software License, Version 1.0. 4 See copy at http://www.boost.org/LICENSE_1_0.txt. 5] 6 7[section:supporting_tools Supporting Tools] 8 9This section describes a few supporting tools written as part of ['Boost.Convert] but which might be useful in their own rights. 10 11[section boost::cnv::range] 12 13['boost::cnv::range] is a consolidation of the [begin, end)-based ranges (such as ['std::string]) and the sentry-based ranges (such as null-terminated C-style strings). It allows universal traversal of both types of ranges with 14 15 for (auto s = range.begin(); s != range.sentry(); ++s) 16 17without the penalty or the need for an extra traversal of the sentry-based ranges in order to find the end. 18 19TODO 20 21[endsect] 22[section boost::cnv::is_range] 23 24TODO 25 26[endsect] 27[section BOOST_DECLARE_HAS_MEMBER] 28 29The BOOST_DECLARE_HAS_MEMBER macro allows to declare a trait which would then let introspect the existence of a class member (a data member or a member function) with the specified name. 30 31For example, the following declarations introduce `local::has_begin` and `local::has_funop` traits which then allow to test if the supplied class has respectively `begin` and `operator()` members: 32 33[has_member_declaration] 34 35Now these traits can be used as follows: 36 37[has_member_classes_tested] 38[has_member_usage] 39 40As it can be seen from the example the traits only check for the existence of a member (be that a data member or a member function) with the specified name. 41 42[endsect] 43[section BOOST_DECLARE_IS_CALLABLE] 44 45The BOOST_DECLARE_IS_CALLABLE macro extends the functionality provided by BOOST_DECLARE_HAS_MEMBER and allows to declare a trait which would then let introspect the existence of a named class member function ['callable with the supplied signature]. 46 47For example, the following declarations introduce `local::can_call_funop` and `local::can_call_func` traits: 48 49[is_callable_declaration] 50 51The traits allow to test if the supplied class has respectively `operator()` and `func()` member functions callable with the specified signature: 52 53[is_callable_classes_tested] 54[is_callable_usage1] 55[is_callable_usage2] 56 57As it can be seen from the example the traits check for the existence of a ['callable] member function but ['not necessarily of the specified signature]. Please check the ['Boost.TTI] library for the latter. 58 59[endsect] 60[section boost::cnv::is_cnv] 61 62TODO 63 64[endsect] 65[endsect] 66 67