1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
- <title>Design</title>
- <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
- <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
- <link rel="home" href="../index.html" title="Chapter 1. The Variadic Macro Data Library 1.9">
- <link rel="up" href="../index.html" title="Chapter 1. The Variadic Macro Data Library 1.9">
- <link rel="prev" href="../BOOST_VMD_IS_VMD_TUPLE.html" title="Macro BOOST_VMD_IS_VMD_TUPLE">
- <link rel="next" href="vmd_compilers.html" title="Compilers">
- </head>
- <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
- <table cellpadding="2" width="100%"><tr>
- <td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
- <td align="center"><a href="../../../../../index.html">Home</a></td>
- <td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
- <td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
- <td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
- <td align="center"><a href="../../../../../more/index.htm">More</a></td>
- </tr></table>
- <hr>
- <div class="spirit-nav">
- <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>
- </div>
- <div class="section">
- <div class="titlepage"><div><div><h2 class="title" style="clear: both">
- <a name="variadic_macro_data.vmd_design"></a><a class="link" href="vmd_design.html" title="Design">Design</a>
- </h2></div></div></div>
- <p>
- The initial impetus for creating this library was entirely practical. I had
- been working on another library of macro functionality, which used Boost PP
- functionality, and I realized that if I could use variadic macros with my other
- library, the end-user usability for that library would be easier. Therefore
- the initial main design goal of this library was to interoperate variadic macro
- data with Boost PP in the easiest and clearest way possible.
- </p>
- <p>
- This led to the original versions of the library as an impetus for adding variadic
- macro data support to Boost PP. While this was being done, but the variadic
- macro data support had not yet been finalized in Boost PP, I still maintained
- the library in two modes, either its own variadic data functionality or deferring
- to the implementation of variadic macros in the Boost PP library.
- </p>
- <p>
- Once support for variadic data had been added to Boost PP I stripped down the
- functionality of this library to only include variadic macro support for functionality
- which was an adjunct to the support in Boost PP. This functionality might be
- seen as experimental, since it largely relied on a macro which tested for empty
- input which Paul Mensonides, the author of Boost PP, had published on the Internet,
- and which by the very nature of the C++ preprocessor is slightly flawed but
- which was the closest approximation of such functionality which I believed
- could be made. I had to tweak this macro somewhat for the Visual C++ preprocessor,
- whose conformance to the C++ standard for macro processing is notably incorrect
- in a number of areas. But I still felt this functionality could be used in
- select situations and might be useful to others. Using this functionality I
- was able to build up some other macros which tested for the various Boost PP
- data types. I also was able to add in functionality, based on Paul Mendsonides
- excellent work, for handling tuples in preprocessing data.
- </p>
- <p>
- All of this particular functionality is impossible to do effectively without
- the use of variadic macros. But I had kept these features at a minimum because
- of the difficulty of using variadic macros with compilers, most notably Visual
- C++, whose implementation of variadic macros is substandard and therefore very
- difficult to get to work correctly when variadic macros must be used.
- </p>
- <p>
- I then realized that if I am going to have a library which takes advantage
- of variadic macros I should see what I could do in the area of parsing preprocessor
- data. This has led to a reorganization of the library as a set of macros largely
- for parsing preprocessor data. All of this is now built on top of my use of
- the almost perfect checking for emptiness which Paul Mensonides originally
- created.
- </p>
- </div>
- <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
- <td align="left"></td>
- <td align="right"><div class="copyright-footer">Copyright © 2010-2017 Tropic Software
- East Inc</div></td>
- </tr></table>
- <hr>
- <div class="spirit-nav">
- <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>
- </div>
- </body>
- </html>
|