1<html> 2<head> 3 <title>BOOST_PP_INCLUDE_SELF</title> 4 <link rel="stylesheet" type="text/css" href="../styles.css"> 5</head> 6<body> 7 <div style="margin-left: 0px;"> 8 The <b>BOOST_PP_INCLUDE_SELF</b> macro includes a file indirectly. 9 </div> 10 <h4>Usage</h4> 11 <div class="code"> 12 #include <b>BOOST_PP_INCLUDE_SELF</b>() 13 </div> 14 <h4>Arguments</h4> 15 <dl> 16 <dt>filename</dt> 17 <dd> 18 A quoted or angle-bracketed filename to be included by <b>BOOST_PP_INCLUDE_SELF</b>. 19 </dd> 20 </dl> 21 <h4>Remarks</h4> 22 <div> 23 <b>BOOST_PP_INDIRECT_SELF</b> must be defined prior to using this macro. 24 </div> 25 <div> 26 Most preprocessors will not allow a file to directly include itself--even when the file protects itself from such a scenario. 27 This macro, in combination with <b>BOOST_PP_INDIRECT_SELF</b> allows a file to include itself indirectly. 28 </div> 29 <div> 30 While <b>BOOST_PP_INDIRECT_SELF</b> is being included, <b>BOOST_PP_INCLUDE_SELF</b> defines the macro <b>BOOST_PP_IS_SELFISH</b> to <i>1</i>. 31 When it returns from the inclusion, <b>BOOST_PP_IS_SELFISH</b> is undefined. 32 </div> 33 <h4>See Also</h4> 34 <ul> 35 <li><a href="indirect_self.html">BOOST_PP_INDIRECT_SELF</a></li> 36 <li><a href="is_selfish.html">BOOST_PP_IS_SELFISH</a></li> 37 </ul> 38 <h4>Requirements</h4> 39 <div> 40 <b>Header:</b> <a href="../headers/iteration/self.html"><boost/preprocessor/iteration/self.hpp></a> 41 </div> 42 <h4>Sample Code</h4> 43<div><pre> 44// file.h 45#if !<a href="is_selfish.html">BOOST_PP_IS_SELFISH</a> 46 47 #ifndef FILE_H_ 48 #define FILE_H_ 49 50 #include <<a href="../headers/iteration/self.html">boost/preprocessor/iteration/self.hpp</a>> 51 52 #define NAME X 53 struct NAME { 54 // ... 55 #define <a href="indirect_self.html">BOOST_PP_INDIRECT_SELF</a> "file.h" 56 #include <a href="include_self.html">BOOST_PP_INCLUDE_SELF</a>() 57 }; 58 59 #define NAME Y 60 struct NAME { 61 // ... 62 #define <a href="indirect_self.html">BOOST_PP_INDIRECT_SELF</a> "file.h" 63 #include <a href="include_self.html">BOOST_PP_INCLUDE_SELF</a>() 64 }; 65 66 #define NAME Z 67 struct NAME { 68 // ... 69 #define <a href="indirect_self.html">BOOST_PP_INDIRECT_SELF</a> "file.h" 70 #include <a href="include_self.html">BOOST_PP_INCLUDE_SELF</a>() 71 }; 72 73 #endif 74 75#else 76 77 inline bool validate(NAME* p) { 78 return true; 79 } 80 81 template<class T> bool validate(T* p) { 82 return dynamic_cast<NAME*>(p); 83 } 84 85 #undef NAME 86 87#endif 88</pre></div> 89 <hr size="1"> 90 <div style="margin-left: 0px;"> 91 <i>� Copyright <a href="http://www.housemarque.com" target="_top">Housemarque Oy</a> 2002</i> 92 </br><i>� Copyright Paul Mensonides 2002</i> 93 </div> 94 <div style="margin-left: 0px;"> 95 <p><small>Distributed under the Boost Software License, Version 1.0. (See 96 accompanying file <a href="../../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or 97 copy at <a href= 98 "http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a>)</small></p> 99 </div> 100</body> 101</html> 102