<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title>Boost Header policy</title> <meta name="GENERATOR" content="Microsoft FrontPage 5.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <meta name="Microsoft Border" content="none, default"> </head> <body bgcolor="#FFFFFF" text="#000000"> <table summary="Navigational header" border="1" bgcolor="#007F7F" cellpadding="2"> <tr> <td bgcolor="#FFFFFF"><img src="../boost.png" alt="boost.png (6897 bytes)" width="277" height="86"></td> <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> </tr> </table> <h1>Boost Header Policy</h1> <p>Header files are the place where a library comes into contact with user code and other libraries. To co-exist peacefully and productively, headers must be "good neighbors".</p> <p>Here are the standards for boost headers. Many of these are also reasonable guidelines for general use. <ul> <li>Header filenames should have a .hpp (lowercase) extension. </li> <li>Unless multiple inclusion is intended, wrap the header in #ifndef guards. Use a naming convention that minimizes the chance of clashes with macro names from other's code. The <a href="#SampleHeader">sample header</a> uses the Boost convention of all uppercase letters, with the header name prefixed by the namespace name, and suffixed with HPP, separated by underscores.</li> <li>Wrap the header contents in a namespace to prevent global namespace pollution. The namespace approach to pollution control is strongly preferred to older approaches such as adding funny prefixes to global names. Libraries which are designed to work well with other Boost libraries should be placed in namespace <tt>boost</tt>.</li> <li>Make sure that a translation unit consisting of just the contents of the header file will compile successfully.</li> <li>Place the header file in a sub-directory to prevent conflict with identically named header files in other libraries. The parent directory is added to the compiler's include search path. Then both your code and user code specifies the sub-directory in <tt>#include</tt> directives. Thus the header <a href="#SampleHeader">sample header</a> would be included by <tt>#include <boost/furball.hpp></tt></li> <li>The preferred ordering for class definitions is public members, protected members, and finally private members.</li> <li>Include the boost/config.hpp <a href="../libs/config/config.htm">configuration header</a> if there is a need to deal with compiler or platform configuration issues.</li> </ul> <h2><a name="SampleHeader"></a>Sample Header</h2> <pre><tt>// Boost general library furball.hpp header file ---------------------------// <<i> Copyright and license notice</i>, as indicated in the <a href="license_info.html">license page</a> > // See http://www.boost.org/ for latest version. #ifndef BOOST_FURBALL_HPP #define BOOST_FURBALL_HPP namespace boost { // Furball class declaration -----------------------------------------------// class furball { public: void throw_up(); private: int whatever; }; // furball } // namespace #endif // include guard</tt></pre> <h2>Coding Style</h2> <p>The alert reader will have noticed that the <a href="#SampleHeader">sample header</a> employs a certain coding style for indentation, positioning braces, commenting ending braces, and similar formatting issues. These stylistic issues are viewed as personal preferences and are not part of the Boost Header Policy.</p> <hr> <p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->02 October, 2003<!--webbot bot="Timestamp" endspan i-checksum="38549" --></p> <p>© Copyright Beman Dawes 1998</p> <p> Distributed under the Boost Software License, Version 1.0. (See accompanying file <a href="../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>) </p> </body> </html>