getting_started.qbk 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. [section Getting Started]
  7. [note Given the ubiquity of `boost::lexical_cast` and the familiarity of the programming community with it, here and further in the documentation `boost::lexical_cast` is often mentioned as a reference.]
  8. [import ../example/getting_started.cpp]
  9. [section Basic Deployment]
  10. For die-hard `boost::lexical_cast` users or as a transitional path to `boost::convert`, one of `boost::convert` deployments is not that different from `boost::lexical_cast`. In fact, the original `boost::lexical_cast` functionality is easily deployed through `boost::convert` interface:
  11. [getting_started_headers1]
  12. [getting_started_using]
  13. [getting_started_default_converter]
  14. [getting_started_example1]
  15. [important As we explore `boost::convert` behavior and interface further, at first they might appear unduly complex, verbose, etc... nothing like `atoi()`... so famous for all the wrong reasons. :-) It is important to remember that a conversion request is only a ['request] which may succeed but may also fail... which might not be as rare or as exceptional as one might hope. `boost::convert` (as well as `boost::lexical_cast`) behavior and interfaces reflect that reality.]
  16. [endsect]
  17. [section Flexibility and Adaptability to Change]
  18. [:[*['"There is nothing more constant than change" Heraclitus]]]
  19. Sooner or later (during initial development or in the maintenance phase) flexibility and adaptability become important. Deployment of ['Boost.Convert] helps to adjust and to change in line with the evolution of the requirements. For example, if the program flow would benefit from the non-throwing behavior, then:
  20. [getting_started_using]
  21. [getting_started_example2]
  22. Or, if the component is identified as too slow, then the performance could be improved with minimal effort by replacing the converter:
  23. [getting_started_headers3]
  24. [getting_started_example3]
  25. If, instead, the requirements change to support more input formats or to require a certain output format, then, again, that could be accommodated with:
  26. [getting_started_headers4]
  27. [getting_started_example4]
  28. [endsect]
  29. [section Basic Conversion-Failure Detection]
  30. [getting_started_using]
  31. [getting_started_example5]
  32. The above is translated to English as
  33. * "['convert a string to int]" for `i1` and `i2` and
  34. * "['convert a string to int and return -1 if the conversion fails]" for `i3`.
  35. The `i1` and `i2` deployments look sufficiently close and behave identically. Namely, with the user instructions silent about the conversion failure, those are treated as "exceptional" and throw.
  36. The `i3` specification, on the other hand, is explicit about conversion failures. The supplied fallback value is returned if the requested conversion fails.
  37. That basic error detection and processing might be sufficient for a variety of conversion deployments. For example:
  38. [getting_started_example6]
  39. Or
  40. [getting_started_example9_func]
  41. [getting_started_example9]
  42. Or, if we do not care about logging conversion failures:
  43. [getting_started_example7]
  44. So far the deployment of `boost::convert` seems more flexible, more compact and natural (your mileage may vary) and potentially more efficient compared to `boost::lexical_cast` which achieves somewhat similar results with:
  45. [getting_started_example8]
  46. By design, this is `boost::lexical_cast`'s only behavior -- straightforward and comprehensible, but limited.
  47. It makes quite a few legitimate process\/program flows difficult and awkward to implement.
  48. ['Boost.Convert] addresses that with additional functionality, flexibility and convenience.
  49. [endsect]
  50. [endsect]