87 lines
5.5 KiB
HTML
87 lines
5.5 KiB
HTML
<html>
|
||
<head>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||
<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.10">
|
||
<link rel="up" href="../index.html" title="Chapter 1. The Variadic Macro Data Library 1.10">
|
||
<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>
|