2021-10-05 21:37:46 +02:00

87 lines
5.5 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>