vmd_design.html 5.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  4. <title>Design</title>
  5. <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
  6. <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
  7. <link rel="home" href="../index.html" title="Chapter&#160;1.&#160;The Variadic Macro Data Library 1.9">
  8. <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;The Variadic Macro Data Library 1.9">
  9. <link rel="prev" href="../BOOST_VMD_IS_VMD_TUPLE.html" title="Macro BOOST_VMD_IS_VMD_TUPLE">
  10. <link rel="next" href="vmd_compilers.html" title="Compilers">
  11. </head>
  12. <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
  13. <table cellpadding="2" width="100%"><tr>
  14. <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
  15. <td align="center"><a href="../../../../../index.html">Home</a></td>
  16. <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
  17. <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
  18. <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
  19. <td align="center"><a href="../../../../../more/index.htm">More</a></td>
  20. </tr></table>
  21. <hr>
  22. <div class="spirit-nav">
  23. <a accesskey="p" href="../BOOST_VMD_IS_VMD_TUPLE.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_compilers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
  24. </div>
  25. <div class="section">
  26. <div class="titlepage"><div><div><h2 class="title" style="clear: both">
  27. <a name="variadic_macro_data.vmd_design"></a><a class="link" href="vmd_design.html" title="Design">Design</a>
  28. </h2></div></div></div>
  29. <p>
  30. The initial impetus for creating this library was entirely practical. I had
  31. been working on another library of macro functionality, which used Boost PP
  32. functionality, and I realized that if I could use variadic macros with my other
  33. library, the end-user usability for that library would be easier. Therefore
  34. the initial main design goal of this library was to interoperate variadic macro
  35. data with Boost PP in the easiest and clearest way possible.
  36. </p>
  37. <p>
  38. This led to the original versions of the library as an impetus for adding variadic
  39. macro data support to Boost PP. While this was being done, but the variadic
  40. macro data support had not yet been finalized in Boost PP, I still maintained
  41. the library in two modes, either its own variadic data functionality or deferring
  42. to the implementation of variadic macros in the Boost PP library.
  43. </p>
  44. <p>
  45. Once support for variadic data had been added to Boost PP I stripped down the
  46. functionality of this library to only include variadic macro support for functionality
  47. which was an adjunct to the support in Boost PP. This functionality might be
  48. seen as experimental, since it largely relied on a macro which tested for empty
  49. input which Paul Mensonides, the author of Boost PP, had published on the Internet,
  50. and which by the very nature of the C++ preprocessor is slightly flawed but
  51. which was the closest approximation of such functionality which I believed
  52. could be made. I had to tweak this macro somewhat for the Visual C++ preprocessor,
  53. whose conformance to the C++ standard for macro processing is notably incorrect
  54. in a number of areas. But I still felt this functionality could be used in
  55. select situations and might be useful to others. Using this functionality I
  56. was able to build up some other macros which tested for the various Boost PP
  57. data types. I also was able to add in functionality, based on Paul Mendsonides
  58. excellent work, for handling tuples in preprocessing data.
  59. </p>
  60. <p>
  61. All of this particular functionality is impossible to do effectively without
  62. the use of variadic macros. But I had kept these features at a minimum because
  63. of the difficulty of using variadic macros with compilers, most notably Visual
  64. C++, whose implementation of variadic macros is substandard and therefore very
  65. difficult to get to work correctly when variadic macros must be used.
  66. </p>
  67. <p>
  68. I then realized that if I am going to have a library which takes advantage
  69. of variadic macros I should see what I could do in the area of parsing preprocessor
  70. data. This has led to a reorganization of the library as a set of macros largely
  71. for parsing preprocessor data. All of this is now built on top of my use of
  72. the almost perfect checking for emptiness which Paul Mensonides originally
  73. created.
  74. </p>
  75. </div>
  76. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  77. <td align="left"></td>
  78. <td align="right"><div class="copyright-footer">Copyright &#169; 2010-2017 Tropic Software
  79. East Inc</div></td>
  80. </tr></table>
  81. <hr>
  82. <div class="spirit-nav">
  83. <a accesskey="p" href="../BOOST_VMD_IS_VMD_TUPLE.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="vmd_compilers.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
  84. </div>
  85. </body>
  86. </html>