// Boost.Convert test and usage example // Copyright (c) 2009-2014 Vladimir Batov. // Use, modification and distribution are subject to the Boost Software License, // Version 1.0. See http://www.boost.org/LICENSE_1_0.txt. #include "./test.hpp" #include //[callable_example1 void plain_old_func(std::string const& value_in, boost::optional& value_out) //] { try { value_out = boost::lexical_cast(value_in); } catch (...) { } } template void convert_all_pof(TypeIn const&, boost::optional&) { } template void assign(boost::optional& value_out, Type const& value_in) { value_out = value_in; } struct converter1 { template void operator()(TypeIn const&, boost::optional&) const { } }; struct take_double { void operator()(double const&, boost::optional&) const {}}; struct take_int { void operator()(int const&, boost::optional&) const {}}; void test::cnv::callables() { typedef boost::function&)> boost_func; char const* const str = "-12"; // Testing old-function-based converter. //[callable_example2 int v01 = boost::convert(str, plain_old_func).value_or(-1); //] // Testing boost::function-based converter. int v02 = boost::convert(str, boost_func(plain_old_func)).value_or(-1); // Testing crazy boost::bind-based converter. //[callable_example3 int v03 = boost::convert(str, boost::bind(assign, _2, boost::bind(boost::lexical_cast, _1))).value_or(-1); //] BOOST_TEST(v01 == -12); BOOST_TEST(v02 == -12); BOOST_TEST(v03 == -12); boost::convert(str, convert_all_pof); boost::convert(11, convert_all_pof); boost::convert(str, converter1()); boost::convert(11, converter1()); boost::convert(11, take_double()); boost::convert(11.23, take_int()); }