<!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>CObject.h File Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> > <b>C++ reference</b> </div> <div align="right"> <a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a> </div> <!-- Generated by Doxygen 1.7.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <div class="left"> <form id="FSearchBox" action="search.php" method="get"> <img id="MSearchSelect" src="search/mag.png" alt=""/> <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"/> </form> </div><div class="right"></div> </div> </li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#nested-classes">Classes</a> | <a href="#namespaces">Namespaces</a> | <a href="#define-members">Defines</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">CObject.h File Reference</div> </div> </div> <div class="contents"> <div class="textblock"><code>#include <<a class="el" href="utils__defs_8h_source.html">mrpt/utils/utils_defs.h</a>></code><br/> <code>#include <<a class="el" href="safe__pointers_8h_source.html">mrpt/utils/safe_pointers.h</a>></code><br/> </div><div class="textblock"><div class="dynheader"> Include dependency graph for CObject.h:</div> <div class="dyncontent"> <div class="center"><img src="_c_object_8h__incl.png" border="0" usemap="#_c_object_8h" alt=""/></div> <map name="_c_object_8h" id="_c_object_8h"> <area shape="rect" id="node3" href="utils__defs_8h.html" title="mrpt/utils/utils_defs.h" alt="" coords="1677,155,1824,181"/><area shape="rect" id="node137" href="safe__pointers_8h.html" title="mrpt/utils/safe_pointers.h" alt="" coords="1789,80,1957,107"/><area shape="rect" id="node7" href="os_8h.html" title="mrpt/system/os.h" alt="" coords="555,229,679,256"/><area shape="rect" id="node20" href="base_2include_2mrpt_2base_2link__pragmas_8h.html" title="mrpt/base/link_pragmas.h" alt="" coords="2251,453,2423,480"/><area shape="rect" id="node23" href="boost__join_8h.html" title="mrpt/utils/boost_join.h" alt="" coords="2225,528,2375,555"/><area shape="rect" id="node25" href="base_2include_2mrpt_2utils_2types_8h.html" title="mrpt/utils/types.h" alt="" coords="1271,304,1393,331"/><area shape="rect" id="node80" href="mrpt__macros_8h.html" title="mrpt/utils/mrpt_macros.h" alt="" coords="278,304,444,331"/><area shape="rect" id="node83" href="compiler__fixes_8h.html" title="mrpt/utils/compiler_fixes.h" alt="" coords="1814,229,1988,256"/><area shape="rect" id="node108" href="smart__ptr_8hpp.html" title="mrpt/otherlibs/stlplus/smart_ptr.hpp" alt="" coords="2572,304,2799,331"/><area shape="rect" id="node125" href="bits_8h.html" title="mrpt/utils/bits.h" alt="" coords="3173,229,3284,256"/><area shape="rect" id="node37" href="mrpt__stdint_8h.html" title="mrpt/utils/mrpt_stdint.h" alt="" coords="1706,453,1861,480"/><area shape="rect" id="node42" href="mrpt__inttypes_8h.html" title="mrpt/utils/mrpt_inttypes.h" alt="" coords="1699,379,1869,405"/><area shape="rect" id="node45" href="math__frwds_8h.html" title="mrpt/math/math_frwds.h" alt="" coords="726,379,889,405"/><area shape="rect" id="node61" href="_dense.html" title="Eigen/Dense" alt="" coords="605,379,701,405"/><area shape="rect" id="node40" href="pstdint_8h.html" title="pstdint.h" alt="" coords="1748,528,1820,555"/><area shape="rect" id="node63" href="_core.html" title="Core" alt="" coords="328,453,379,480"/><area shape="rect" id="node110" href="containers__fixes_8hpp.html" title="containers_fixes.hpp" alt="" coords="2835,453,2977,480"/><area shape="rect" id="node112" href="exceptions_8hpp.html" title="exceptions.hpp" alt="" coords="2794,379,2904,405"/><area shape="rect" id="node119" href="atomic__incr_8h.html" title="mrpt/synch/atomic_incr.h" alt="" coords="2601,379,2769,405"/><area shape="rect" id="node123" href="smart__ptr_8tpp.html" title="smart_ptr.tpp" alt="" coords="2929,379,3028,405"/><area shape="rect" id="node127" href="_s_s_e__types_8h.html" title="mrpt/utils/SSE_types.h" alt="" coords="3171,304,3328,331"/></map> </div> </div><div class="textblock"><div class="dynheader"> This graph shows which files directly or indirectly include this file:</div> <div class="dyncontent"> <div class="center"><img src="_c_object_8h__dep__incl.png" border="0" usemap="#_c_object_8hdep" alt=""/></div> <map name="_c_object_8hdep" id="_c_object_8hdep"> <area shape="rect" id="node3" href="_c_serializable_8h.html" title="CSerializable.h" alt="" coords="2055,155,2165,181"/><area shape="rect" id="node9" href="base_2include_2mrpt_2utils_8h.html" title="utils.h" alt="" coords="830,528,887,555"/><area shape="rect" id="node154" href="_c_stream_8h.html" title="CStream.h" alt="" coords="2108,80,2193,107"/><area shape="rect" id="node5" href="stl__extensions_8h.html" title="stl_extensions.h" alt="" coords="1401,304,1517,331"/><area shape="rect" id="node7" href="_c_spline_interpolator1_d_8h.html" title="CSplineInterpolator1D.h" alt="" coords="1857,379,2017,405"/><area shape="rect" id="node11" href="_c_network_of_poses_8h.html" title="CNetworkOfPoses.h" alt="" coords="1690,379,1832,405"/><area shape="rect" id="node13" href="_h_m_t___s_l_a_m__common_8h.html" title="HMT_SLAM_common.h" alt="" coords="1503,379,1665,405"/><area shape="rect" id="node15" href="_c_h_m_h_map_node_8h.html" title="CHMHMapNode.h" alt="" coords="1417,528,1547,555"/><area shape="rect" id="node18" href="metaprogramming_8h.html" title="metaprogramming.h" alt="" coords="1143,229,1280,256"/><area shape="rect" id="node22" href="_c_array_8h.html" title="CArray.h" alt="" coords="1897,229,1971,256"/><area shape="rect" id="node24" href="_c_matrix_fixed_numeric_8h.html" title="CMatrixFixedNumeric.h" alt="" coords="2012,304,2171,331"/><area shape="rect" id="node26" href="_c_matrix_8h.html" title="CMatrix.h" alt="" coords="2653,379,2731,405"/><area shape="rect" id="node28" href="_c_image_8h.html" title="CImage.h" alt="" coords="3331,453,3409,480"/><area shape="rect" id="node31" href="_c_observation3_d_range_scan_8h.html" title="CObservation3DRangeScan.h" alt="" coords="2754,528,2952,555"/><area shape="rect" id="node33" href="_c_open_g_l_viewport_8h.html" title="COpenGLViewport.h" alt="" coords="4275,528,4417,555"/><area shape="rect" id="node35" href="_c_occupancy_grid_map2_d_8h.html" title="COccupancyGridMap2D.h" alt="" coords="3437,528,3611,555"/><area shape="rect" id="node37" href="_c_random_field_grid_map2_d_8h.html" title="CRandomFieldGridMap2D.h" alt="" coords="4025,528,4212,555"/><area shape="rect" id="node39" href="_t_camera_8h.html" title="TCamera.h" alt="" coords="2094,379,2180,405"/><area shape="rect" id="node43" href="_c_matrix_template_numeric_8h.html" title="CMatrixTemplateNumeric.h" alt="" coords="2199,229,2381,256"/><area shape="rect" id="node46" href="_c_matrix_d_8h.html" title="CMatrixD.h" alt="" coords="4087,304,4176,331"/><area shape="rect" id="node48" href="_c_pose3_d_p_d_f_8h.html" title="CPose3DPDF.h" alt="" coords="3365,379,3481,405"/><area shape="rect" id="node51" href="_c_pose_p_d_f_8h.html" title="CPosePDF.h" alt="" coords="2410,304,2509,331"/><area shape="rect" id="node53" href="_c_point_p_d_f_8h.html" title="CPointPDF.h" alt="" coords="2529,379,2628,405"/><area shape="rect" id="node55" href="_c_matrix_b_8h.html" title="CMatrixB.h" alt="" coords="2297,304,2385,331"/><area shape="rect" id="node63" href="_c_point2_d_8h.html" title="CPoint2D.h" alt="" coords="3695,229,3785,256"/><area shape="rect" id="node65" href="_c_point2_d_p_d_f_8h.html" title="CPoint2DPDF.h" alt="" coords="2691,304,2807,331"/><area shape="rect" id="node67" href="_c_metric_map_8h.html" title="CMetricMap.h" alt="" coords="3472,304,3576,331"/><area shape="rect" id="node69" href="_c_observation2_d_range_scan_8h.html" title="CObservation2DRangeScan.h" alt="" coords="2255,379,2453,405"/><area shape="rect" id="node71" href="_c_sensory_frame_8h.html" title="CSensoryFrame.h" alt="" coords="2023,453,2151,480"/><area shape="rect" id="node77" href="_c_polygon_8h.html" title="CPolygon.h" alt="" coords="1847,304,1937,331"/><area shape="rect" id="node82" href="_c_pose2_d_grid_template_8h.html" title="CPose2DGridTemplate.h" alt="" coords="2660,229,2828,256"/><area shape="rect" id="node86" href="_c_probability_particle_8h.html" title="CProbabilityParticle.h" alt="" coords="2853,229,3000,256"/><area shape="rect" id="node88" href="_c_poses2_d_sequence_8h.html" title="CPoses2DSequence.h" alt="" coords="3025,229,3179,256"/><area shape="rect" id="node90" href="_c_poses3_d_sequence_8h.html" title="CPoses3DSequence.h" alt="" coords="3204,229,3357,256"/><area shape="rect" id="node92" href="_c_message_8h.html" title="CMessage.h" alt="" coords="647,453,743,480"/><area shape="rect" id="node95" href="_c_string_list_8h.html" title="CStringList.h" alt="" coords="767,453,865,480"/><area shape="rect" id="node99" href="_c_memory_chunk_8h.html" title="CMemoryChunk.h" alt="" coords="940,379,1068,405"/><area shape="rect" id="node102" href="_c_m_h_properties_values_list_8h.html" title="CMHPropertiesValuesList.h" alt="" coords="991,453,1175,480"/><area shape="rect" id="node108" href="_c_simple_database_8h.html" title="CSimpleDatabase.h" alt="" coords="44,453,183,480"/><area shape="rect" id="node111" href="_c_properties_values_list_8h.html" title="CPropertiesValuesList.h" alt="" coords="257,453,420,480"/><area shape="rect" id="node115" href="_c_type_selector_8h.html" title="CTypeSelector.h" alt="" coords="1249,453,1369,480"/><area shape="rect" id="node119" href="_c_list_of_classes_8h.html" title="CListOfClasses.h" alt="" coords="445,453,571,480"/><area shape="rect" id="node122" href="_c_robot_simulator_8h.html" title="CRobotSimulator.h" alt="" coords="631,379,764,405"/><area shape="rect" id="node125" href="_c_detectable_object_8h.html" title="CDetectableObject.h" alt="" coords="2887,304,3031,331"/><area shape="rect" id="node127" href="_c_observation_8h.html" title="CObservation.h" alt="" coords="3810,229,3923,256"/><area shape="rect" id="node134" href="_c_observation_gas_sensors_8h.html" title="CObservationGasSensors.h" alt="" coords="3601,304,3785,331"/><area shape="rect" id="node136" href="_c_observation_wireless_power_8h.html" title="CObservationWirelessPower.h" alt="" coords="3810,304,4011,331"/><area shape="rect" id="node140" href="_c_base_g_u_i_window_8h.html" title="CBaseGUIWindow.h" alt="" coords="3383,229,3527,256"/><area shape="rect" id="node142" href="_c_renderizable_8h.html" title="CRenderizable.h" alt="" coords="3551,229,3669,256"/></map> </div> </div> <p><a href="_c_object_8h_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr><td colspan="2"><h2><a name="nested-classes"></a> Classes</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1utils_1_1_c_object_ptr.html">mrpt::utils::CObjectPtr</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A smart pointer to a <a class="el" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">CObject</a> object. <a href="classmrpt_1_1utils_1_1_c_object_ptr.html#details">More...</a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A structure that holds runtime class type information. <a href="structmrpt_1_1utils_1_1_t_runtime_class_id.html#details">More...</a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structmrpt_1_1utils_1_1_c_l_a_s_s_i_n_i_t.html">mrpt::utils::CLASSINIT</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Auxiliary structure used for CObject-based RTTI. <a href="structmrpt_1_1utils_1_1_c_l_a_s_s_i_n_i_t.html#details">More...</a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classmrpt_1_1utils_1_1_c_object.html">mrpt::utils::CObject</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">The virtual base class of all MRPT classes with a unified RTTI system. <a href="classmrpt_1_1utils_1_1_c_object.html#details">More...</a><br/></td></tr> <tr><td colspan="2"><h2><a name="namespaces"></a> Namespaces</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemrpt.html">mrpt</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight"><p>This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. </p> <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacemrpt_1_1utils.html">mrpt::utils</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Classes for serialization, sockets, ini-file manipulation, streams, list of properties-values, timewatch, extensions to STL. </p> <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html">std</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight"><p>STL namespace. </p> <br/></td></tr> <tr><td colspan="2"><h2><a name="define-members"></a> Defines</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a3b29d8d0ead735ece9941e7a58619c7c">IMPLEMENTS_VIRTUAL_MRPT_OBJECT</a>(class_name, base_class_name, NameSpace)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This must be inserted as implementation of some required members for virtual CSerializable classes: <a href="#a3b29d8d0ead735ece9941e7a58619c7c"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="func-members"></a> Functions</h2></td></tr> <tr><td class="memTemplParams" colspan="2">template<typename T , typename C , typename COUNTER > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacestd.html#aa9ad07b649a4150faee2aabbb67ce985">std::operator==</a> (const <a class="el" href="classstlplus_1_1smart__ptr__base.html">stlplus::smart_ptr_base</a>< T, C, COUNTER > &a, const <a class="el" href="classstlplus_1_1smart__ptr__base.html">stlplus::smart_ptr_base</a>< T, C, COUNTER > &b)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This operator enables comparing two smart pointers with "==" to test whether they point to the same object. <a href="#aa9ad07b649a4150faee2aabbb67ce985"></a><br/></td></tr> <tr><td class="memTemplParams" colspan="2">template<typename T , typename C , typename COUNTER > </td></tr> <tr><td class="memTemplItemLeft" align="right" valign="top">bool </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespacestd.html#ac5064aedf453a9c7606180988e266da3">std::operator!=</a> (const <a class="el" href="classstlplus_1_1smart__ptr__base.html">stlplus::smart_ptr_base</a>< T, C, COUNTER > &a, const <a class="el" href="classstlplus_1_1smart__ptr__base.html">stlplus::smart_ptr_base</a>< T, C, COUNTER > &b)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This operator enables comparing two smart pointers with "!=" to test whether they don't point to the same object. <a href="#ac5064aedf453a9c7606180988e266da3"></a><br/></td></tr> <tr><td colspan="2"><h2><a name="member-group"></a> RTTI classes and functions</h2></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#ae1e916f2fdc79ed0da6508acdb1848a0">CLASS_ID</a>(class_name)   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(&class_name::class##class_name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Access to runtime class ID for a defined class name. <a href="#ae1e916f2fdc79ed0da6508acdb1848a0"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a50425f043b81147fed5f71d2e26ca337">CLASS_ID_NAMESPACE</a>(class_name, namespaceName)   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(&namespaceName::class_name::class##class_name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Access to runtime class ID for a defined class name. <a href="#a50425f043b81147fed5f71d2e26ca337"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a08316b183b1a5337ac5b82533ac2dd19">CLASS_ID_TEMPLATE</a>(class_name, T)   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(& template <class T> class_name<T>::class##class_name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Access to runtime class ID for a defined template class name. <a href="#a08316b183b1a5337ac5b82533ac2dd19"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a794ea7da2e1f7eb092d140ca5091e982">IS_CLASS</a>(ptrObj, class_name)   ((ptrObj)->GetRuntimeClass()==CLASS_ID(class_name))</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Evaluates to true if the given pointer to an object (derived from <a class="el" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a>) is of the given class. <a href="#a794ea7da2e1f7eb092d140ca5091e982"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a8047e96932be100635bab4f27731320f">IS_DERIVED</a>(ptrObj, class_name)   ((ptrObj)->GetRuntimeClass()->derivedFrom(CLASS_ID(class_name)))</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Evaluates to true if the given pointer to an object (derived from <a class="el" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a>) is an instance of the given class or any of its derived classes. <a href="#a8047e96932be100635bab4f27731320f"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a89a1b701b9898005d954af26d92766fe">DEFINE_MRPT_OBJECT</a>(class_name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in all CObject classes definition, within the class declaration. <a href="#a89a1b701b9898005d954af26d92766fe"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a0e854723702802213de8c20bf5697bff">DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE</a>(class_name, base_name, _LINKAGE_)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, _LINKAGE_ class_name)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a1933e899c6d001e2a59dd430115a10ac">DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_NO_LINKAGE</a>(class_name, base_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, class_name)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#afd9e3f83bf8b2ef843831523123740f1">DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2</a>(class_name, base_name, class_name_LINKAGE_)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in all CObject classes definition, before the class declaration. <a href="#afd9e3f83bf8b2ef843831523123740f1"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#ada0eb782a89c90e1ae6dc5def698af50">DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE</a>(class_name, _LINKAGE_)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, _LINKAGE_ class_name)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#abe63fbee64570d9d4f9b34c46ac9b719">DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE</a>(class_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name)</td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#abc5e24242cdf25470fbdd69a3e6a4a99">DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2</a>(class_name, class_name_LINKAGE_)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in all CObject classes definition, before the class declaration. <a href="#abc5e24242cdf25470fbdd69a3e6a4a99"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a9bb6492c8bbf8569f3752ba06e689e91">DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE</a>(class_name, base_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, BASE_IMPEXP )</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in all CObject classes definition, before the class declaration. <a href="#a9bb6492c8bbf8569f3752ba06e689e91"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#aa64e4575978b49af0f2d47b1fdf5ad75">DEFINE_MRPT_OBJECT_PRE</a>(class_name)   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, BASE_IMPEXP )</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in all CObject classes definition, before the class declaration. <a href="#aa64e4575978b49af0f2d47b1fdf5ad75"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a821c31b2df70d6b3c0f8b0d49374a009">IMPLEMENTS_MRPT_OBJECT</a>(class_name, base, NameSpace)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This must be inserted in all CObject classes implementation files. <a href="#a821c31b2df70d6b3c0f8b0d49374a009"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="_c_object_8h.html#a80d5b68d3ba12ec5f640ce53651b121b">DEFINE_VIRTUAL_MRPT_OBJECT</a>(class_name)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">This declaration must be inserted in virtual CSerializable classes definition: <a href="#a80d5b68d3ba12ec5f640ce53651b121b"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">typedef safe_ptr< TRuntimeClassId > </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#ga9a8b385c06e33bb7ab5a8fc51ad10fc8">mrpt::utils::TRuntimeClassIdPtr</a></td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">A wrapper class for a "TRuntimeClassId *", well-defined with respect to copy operators and constructors. <a href="group__mrpt__base__grp.html#ga9a8b385c06e33bb7ab5a8fc51ad10fc8"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">class BASE_IMPEXP </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">mrpt::utils::CObject</a></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void BASE_IMPEXP </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#ga5af77a9809680e1559cde8167361518e">mrpt::utils::registerClass</a> (const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a> *pNewClass)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Register a class into the MRPT internal list of "CSerializable" descendents. <a href="group__mrpt__base__grp.html#ga5af77a9809680e1559cde8167361518e"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void BASE_IMPEXP </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#ga3d32f87193923526b0dd86ed968fb854">mrpt::utils::registerClassCustomName</a> (const char *customName, const TRuntimeClassId *pNewClass)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Mostly for internal use within mrpt sources, to handle exceptional cases with multiple serialization names for backward compatibility (CMultiMetricMaps, <a class="el" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a>,...) <a href="group__mrpt__base__grp.html#ga3d32f87193923526b0dd86ed968fb854"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classstd_1_1vector.html">std::vector</a>< const <br class="typebreak"/> <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a> * ><br class="typebreak"/> BASE_IMPEXP </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#ga69eeb95bbeaa786937d070c300169a32">mrpt::utils::getAllRegisteredClasses</a> ()</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Returns a list with all the classes registered in the system through <a class="el" href="group__mrpt__base__grp.html#ga5af77a9809680e1559cde8167361518e" title="Register a class into the MRPT internal list of "CSerializable" descendents.">mrpt::utils::registerClass</a>. <a href="group__mrpt__base__grp.html#ga69eeb95bbeaa786937d070c300169a32"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">const TRuntimeClassId BASE_IMPEXP * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__mrpt__base__grp.html#ga6e361b1e00875a96e3a74936b65ddbec">mrpt::utils::findRegisteredClass</a> (const <a class="el" href="classstd_1_1string.html">std::string</a> &className)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Return info about a given class by its name, or NULL if the class is not registered. <a href="group__mrpt__base__grp.html#ga6e361b1e00875a96e3a74936b65ddbec"></a><br/></td></tr> </table> <hr/><h2>Define Documentation</h2> <a class="anchor" id="ae1e916f2fdc79ed0da6508acdb1848a0"></a><!-- doxytag: member="CObject.h::CLASS_ID" ref="ae1e916f2fdc79ed0da6508acdb1848a0" args="(class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CLASS_ID</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name</td><td>)</td> <td>   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(&class_name::class##class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Access to runtime class ID for a defined class name. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00103">103</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> <p>Referenced by <a class="el" href="_c_object_8h_source.html#l00142">mrpt::utils::CObject::GetRuntimeClass()</a>, <a class="el" href="_c_rawlog_8h_source.html#l00226">mrpt::slam::CRawlog::iterator::getType()</a>, and <a class="el" href="_c_rawlog_8h_source.html#l00260">mrpt::slam::CRawlog::const_iterator::getType()</a>.</p> </div> </div> <a class="anchor" id="a50425f043b81147fed5f71d2e26ca337"></a><!-- doxytag: member="CObject.h::CLASS_ID_NAMESPACE" ref="a50425f043b81147fed5f71d2e26ca337" args="(class_name, namespaceName)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CLASS_ID_NAMESPACE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">namespaceName </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(&namespaceName::class_name::class##class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Access to runtime class ID for a defined class name. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00107">107</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> <p>Referenced by <a class="el" href="_c_open_g_l_viewport_8h_source.html#l00237">mrpt::opengl::COpenGLViewport::getByClass()</a>, and <a class="el" href="_c_set_of_objects_8h_source.html#l00120">mrpt::opengl::CSetOfObjects::getByClass()</a>.</p> </div> </div> <a class="anchor" id="a08316b183b1a5337ac5b82533ac2dd19"></a><!-- doxytag: member="CObject.h::CLASS_ID_TEMPLATE" ref="a08316b183b1a5337ac5b82533ac2dd19" args="(class_name, T)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CLASS_ID_TEMPLATE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">T </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   static_cast<const <a class="el" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html">mrpt::utils::TRuntimeClassId</a>*>(& template <class T> class_name<T>::class##class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Access to runtime class ID for a defined template class name. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00111">111</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a89a1b701b9898005d954af26d92766fe"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT" ref="a89a1b701b9898005d954af26d92766fe" args="(class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name</td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="comment">/*! @name RTTI stuff */</span> \<span class="comment"></span> <span class="comment"> /*! @{ */</span> \ protected: \ static <span class="keyword">const</span> mrpt::utils::TRuntimeClassId* _GetBaseClass(); \ static mrpt::utils::CLASSINIT _init_##class_name;\ public: \<span class="comment"></span> <span class="comment"> /*! A typedef for the associated smart pointer */</span> \ typedef class_name##Ptr SmartPtr; \ static mrpt::utils::TRuntimeClassId <span class="keyword">class</span>##class_name; \ static <span class="keyword">const</span> mrpt::utils::TRuntimeClassId *classinfo; \ virtual <span class="keyword">const</span> mrpt::utils::TRuntimeClassId* GetRuntimeClass() <span class="keyword">const</span>; \ static mrpt<a class="code" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">::utils::CObject</a>* CreateObject(); \ static class_name##Ptr Create(); \ virtual mrpt<a class="code" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">::utils::CObject</a> *duplicate() <span class="keyword">const</span>; \<span class="comment"></span> <span class="comment"> /*! @} */</span> \ public: \ EIGEN_MAKE_ALIGNED_OPERATOR_NEW \ </pre></div> <p>This declaration must be inserted in all CObject classes definition, within the class declaration. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00162">162</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="aa64e4575978b49af0f2d47b1fdf5ad75"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE" ref="aa64e4575978b49af0f2d47b1fdf5ad75" args="(class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name</td><td>)</td> <td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE(class_name, BASE_IMPEXP )</td> </tr> </table> </div> <div class="memdoc"> <p>This declaration must be inserted in all CObject classes definition, before the class declaration. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00250">250</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a9bb6492c8bbf8569f3752ba06e689e91"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE" ref="a9bb6492c8bbf8569f3752ba06e689e91" args="(class_name, base_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base_name </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, BASE_IMPEXP )</td> </tr> </table> </div> <div class="memdoc"> <p>This declaration must be inserted in all CObject classes definition, before the class declaration. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00245">245</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a0e854723702802213de8c20bf5697bff"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE" ref="a0e854723702802213de8c20bf5697bff" args="(class_name, base_name, _LINKAGE_)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">_LINKAGE_ </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, _LINKAGE_ class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00183">183</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="afd9e3f83bf8b2ef843831523123740f1"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2" ref="afd9e3f83bf8b2ef843831523123740f1" args="(class_name, base_name, class_name_LINKAGE_)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">class_name_LINKAGE_ </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">class </span>class_name_LINKAGE_; \<span class="comment"></span> <span class="comment"> /*! The smart pointer type for the associated class */</span> \ struct class_name_LINKAGE_##Ptr : <span class="keyword">public</span> base_name##Ptr \ { \ typedef class_name <a class="code" href="eigen__plugins_8h.html#afd07186978da46f9908364e389f8a403" title="Type of the elements.">value_type</a>; \ inline class_name##Ptr() : base_name##Ptr(static_cast<base_name*>(NULL)) { } \ inline <span class="keyword">explicit</span> class_name##Ptr(class_name* p) : base_name##Ptr( reinterpret_cast<base_name*>(p) ) { } \ inline <span class="keyword">explicit</span> class_name##Ptr(<span class="keyword">const</span> base_name##Ptr & p) : base_name##Ptr(p) { <a class="code" href="mrpt__macros_8h.html#ad30ea0382c594c0e2efe88212e9352b0">ASSERTMSG_</a>( p->GetRuntimeClass()->derivedFrom(#class_name),<a class="code" href="namespacemrpt.html#a3a27af794b658df5491e2b7678f8ccb8" title="A std::string version of C sprintf.">::mrpt::format</a>(<span class="stringliteral">"Wrong typecasting of smart pointers: %s -> %s"</span>,p->GetRuntimeClass()->className, #class_name) ) } \ inline <span class="keyword">explicit</span> class_name##Ptr(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_object_ptr.html" title="A smart pointer to a CObject object.">mrpt::utils::CObjectPtr</a> & p) : base_name##Ptr(p) { <a class="code" href="mrpt__macros_8h.html#ad30ea0382c594c0e2efe88212e9352b0">ASSERTMSG_</a>( p->GetRuntimeClass()->derivedFrom(#class_name),<a class="code" href="namespacemrpt.html#a3a27af794b658df5491e2b7678f8ccb8" title="A std::string version of C sprintf.">::mrpt::format</a>(<span class="stringliteral">"Wrong typecasting of smart pointers: %s -> %s"</span>,p->GetRuntimeClass()->className, #class_name) ) } \ inline <span class="keywordtype">void</span> setFromPointerDoNotFreeAtDtor(<span class="keyword">const</span> class_name* p) { this-><span class="keyword">set</span>(<span class="keyword">const_cast<</span><a class="code" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>*<span class="keyword">></span>(p))); m_holder->increment(); } \<span class="comment"></span> <span class="comment"> /*! Return the internal plain C++ pointer */</span> \ inline class_name * pointer() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>(base_name##Ptr::pointer()); } \<span class="comment"></span> <span class="comment"> /*! Return the internal plain C++ pointer (const) */</span> \ inline <span class="keyword">const</span> class_name * pointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>(base_name##Ptr::pointer()); } \ inline class_name* operator ->(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>( base_name##Ptr::operator ->() ); } \ inline <span class="keyword">const</span> class_name* operator ->(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>( base_name##Ptr::operator ->() ); } \ inline class_name& <a class="code" href="group__container__ops__grp.html#ga6f2d8625a637a5a65585065331b5b0c5" title="a*b (element-wise multiplication)">operator *</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>( base_name##Ptr::operator ->() ); } \ inline <span class="keyword">const</span> class_name& <a class="code" href="group__container__ops__grp.html#ga6f2d8625a637a5a65585065331b5b0c5" title="a*b (element-wise multiplication)">operator *</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>( base_name##Ptr::operator ->() ); } \ }; </pre></div> <p>This declaration must be inserted in all CObject classes definition, before the class declaration. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00192">192</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a1933e899c6d001e2a59dd430115a10ac"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_NO_LINKAGE" ref="a1933e899c6d001e2a59dd430115a10ac" args="(class_name, base_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_NO_LINKAGE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base_name </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_BASE_LINKAGE2(class_name, base_name, class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00187">187</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="ada0eb782a89c90e1ae6dc5def698af50"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE" ref="ada0eb782a89c90e1ae6dc5def698af50" args="(class_name, _LINKAGE_)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">_LINKAGE_ </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, _LINKAGE_ class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00215">215</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="abc5e24242cdf25470fbdd69a3e6a4a99"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2" ref="abc5e24242cdf25470fbdd69a3e6a4a99" args="(class_name, class_name_LINKAGE_)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">class_name_LINKAGE_ </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">class </span>class_name_LINKAGE_; \<span class="comment"></span> <span class="comment"> /*! The smart pointer type for the associated class */</span> \ struct class_name_LINKAGE_##Ptr : <span class="keyword">public</span> mrpt::utils::CObjectPtr \ { \ inline class_name##Ptr() : mrpt::utils::CObjectPtr(static_cast<mrpt::utils::<a class="code" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">CObject</a>*>(NULL)) { } \ inline <span class="keyword">explicit</span> class_name##Ptr(class_name* p) : mrpt::utils::CObjectPtr( reinterpret_cast<mrpt::utils::<a class="code" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">CObject</a>*>(p) ) { } \ inline <span class="keyword">explicit</span> class_name##Ptr(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_object_ptr.html" title="A smart pointer to a CObject object.">mrpt::utils::CObjectPtr</a> & p) : mrpt::utils::CObjectPtr(p) { <a class="code" href="mrpt__macros_8h.html#ad30ea0382c594c0e2efe88212e9352b0">ASSERTMSG_</a>( p->GetRuntimeClass()->derivedFrom(#class_name),<a class="code" href="namespacemrpt.html#a3a27af794b658df5491e2b7678f8ccb8" title="A std::string version of C sprintf.">::mrpt::format</a>(<span class="stringliteral">"Wrong typecasting of smart pointers: %s -> %s"</span>,p->GetRuntimeClass()->className, #class_name) ) } \ inline <span class="keywordtype">void</span> setFromPointerDoNotFreeAtDtor(<span class="keyword">const</span> class_name* p) { this-><span class="keyword">set</span>(<span class="keyword">const_cast<</span><a class="code" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>*<span class="keyword">></span>(<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span><a class="code" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>*<span class="keyword">></span>(p))); m_holder->increment(); } \<span class="comment"></span> <span class="comment"> /*! Return the internal plain C++ pointer */</span> \ inline class_name * pointer() { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>(mrpt::utils::CObjectPtr::pointer()); } \<span class="comment"></span> <span class="comment"> /*! Return the internal plain C++ pointer (const) */</span> \ inline <span class="keyword">const</span> class_name * pointer()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>(mrpt::utils::CObjectPtr::pointer()); } \ inline class_name* operator ->(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>( mrpt::utils::CObjectPtr::operator ->() ); } \ inline <span class="keyword">const</span> class_name* operator ->(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>( mrpt::utils::CObjectPtr::operator ->() ); } \ inline class_name& <a class="code" href="group__container__ops__grp.html#ga6f2d8625a637a5a65585065331b5b0c5" title="a*b (element-wise multiplication)">operator *</a>(<span class="keywordtype">void</span>) { <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast<</span>class_name*<span class="keyword">></span>( mrpt::utils::CObjectPtr::operator ->() ); } \ inline <span class="keyword">const</span> class_name& <a class="code" href="group__container__ops__grp.html#ga6f2d8625a637a5a65585065331b5b0c5" title="a*b (element-wise multiplication)">operator *</a>(<span class="keywordtype">void</span>)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> *<span class="keyword">reinterpret_cast<</span><span class="keyword">const </span>class_name*<span class="keyword">></span>( mrpt::utils::CObjectPtr::operator ->() ); } \ }; </pre></div> <p>This declaration must be inserted in all CObject classes definition, before the class declaration. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00224">224</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="abe63fbee64570d9d4f9b34c46ac9b719"></a><!-- doxytag: member="CObject.h::DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE" ref="abe63fbee64570d9d4f9b34c46ac9b719" args="(class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_MRPT_OBJECT_PRE_NO_LINKAGE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name</td><td>)</td> <td>   DEFINE_MRPT_OBJECT_PRE_CUSTOM_LINKAGE2(class_name, class_name)</td> </tr> </table> </div> <div class="memdoc"> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00219">219</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a80d5b68d3ba12ec5f640ce53651b121b"></a><!-- doxytag: member="CObject.h::DEFINE_VIRTUAL_MRPT_OBJECT" ref="a80d5b68d3ba12ec5f640ce53651b121b" args="(class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define DEFINE_VIRTUAL_MRPT_OBJECT</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name</td><td>)</td> <td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="comment">/*! @name RTTI stuff */</span> \<span class="comment"></span> <span class="comment"> /*! @{ */</span> \ protected: \ static <span class="keyword">const</span> mrpt::utils::TRuntimeClassId* _GetBaseClass(); \ public: \ static <span class="keyword">const</span> mrpt::utils::TRuntimeClassId <span class="keyword">class</span>##class_name; \ virtual <span class="keyword">const</span> mrpt::utils::TRuntimeClassId* GetRuntimeClass() <span class="keyword">const</span>; \ friend <span class="keyword">class </span><a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">mrpt::utils::CStream</a>; \ </pre></div> <p>This declaration must be inserted in virtual CSerializable classes definition: </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00274">274</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a821c31b2df70d6b3c0f8b0d49374a009"></a><!-- doxytag: member="CObject.h::IMPLEMENTS_MRPT_OBJECT" ref="a821c31b2df70d6b3c0f8b0d49374a009" args="(class_name, base, NameSpace)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define IMPLEMENTS_MRPT_OBJECT</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">NameSpace </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment">mrpt<a class="code" href="group__mrpt__base__grp.html#gab4b900b831f6e7bbc7557cd35cd1c46b">::utils::CObject</a>* NameSpace::class_name::CreateObject() \ { <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><a class="code" href="classmrpt_1_1utils_1_1_c_object.html" title="The virtual base class of all MRPT classes with a unified RTTI system.">mrpt::utils::CObject</a>*<span class="keyword">></span>( <span class="keyword">new</span> NameSpace::class_name ); } \ NameSpace::class_name##Ptr NameSpace::class_name::Create() \ { <span class="keywordflow">return</span> NameSpace::class_name##Ptr( <span class="keyword">new</span> NameSpace::class_name ); } \ const mrpt::utils::TRuntimeClassId* NameSpace::class_name::_GetBaseClass() \ { <span class="keywordflow">return</span> <a class="code" href="_c_object_8h.html#ae1e916f2fdc79ed0da6508acdb1848a0" title="Access to runtime class ID for a defined class name.">CLASS_ID</a>(base); } \ mrpt::utils::TRuntimeClassId NameSpace::class_name::class##class_name = { \ <span class="preprocessor"> #class_name, NameSpace::class_name::CreateObject, &class_name::_GetBaseClass }; \</span> <span class="preprocessor"> const mrpt::utils::TRuntimeClassId *NameSpace::class_name::classinfo = & NameSpace::class_name::class##class_name; \</span> <span class="preprocessor"> const mrpt::utils::TRuntimeClassId* NameSpace::class_name::GetRuntimeClass() const \</span> <span class="preprocessor"> { return CLASS_ID_NAMESPACE(class_name,NameSpace); } \</span> <span class="preprocessor"> mrpt::utils::CLASSINIT NameSpace::class_name::_init_##class_name(CLASS_ID(base)); \</span> <span class="preprocessor"> mrpt::utils::CObject * NameSpace::class_name::duplicate() const \</span> <span class="preprocessor"> { return static_cast<mrpt::utils::CObject*>( new NameSpace::class_name(*this) ); }</span> </pre></div> <p>This must be inserted in all CObject classes implementation files. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00255">255</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a3b29d8d0ead735ece9941e7a58619c7c"></a><!-- doxytag: member="CObject.h::IMPLEMENTS_VIRTUAL_MRPT_OBJECT" ref="a3b29d8d0ead735ece9941e7a58619c7c" args="(class_name, base_class_name, NameSpace)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define IMPLEMENTS_VIRTUAL_MRPT_OBJECT</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">base_class_name, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">NameSpace </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div> <div class="memdoc"> <b>Value:</b><div class="fragment"><pre class="fragment"><span class="keyword">const</span> mrpt::utils::TRuntimeClassId* class_name::_GetBaseClass() \ { <span class="keywordflow">return</span> <a class="code" href="_c_object_8h.html#ae1e916f2fdc79ed0da6508acdb1848a0" title="Access to runtime class ID for a defined class name.">CLASS_ID</a>(base_class_name); } \ const mrpt::utils::TRuntimeClassId class_name::class##class_name = { \ <span class="preprocessor"> #class_name, NULL, &class_name::_GetBaseClass }; \</span> <span class="preprocessor"> const mrpt::utils::TRuntimeClassId* class_name::GetRuntimeClass() const \</span> <span class="preprocessor"> { return CLASS_ID(class_name); }</span> </pre></div> <p>This must be inserted as implementation of some required members for virtual CSerializable classes: </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00289">289</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> <a class="anchor" id="a794ea7da2e1f7eb092d140ca5091e982"></a><!-- doxytag: member="CObject.h::IS_CLASS" ref="a794ea7da2e1f7eb092d140ca5091e982" args="(ptrObj, class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define IS_CLASS</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">ptrObj, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">class_name </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   ((ptrObj)->GetRuntimeClass()==CLASS_ID(class_name))</td> </tr> </table> </div> <div class="memdoc"> <p>Evaluates to true if the given pointer to an object (derived from <a class="el" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a>) is of the given class. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00114">114</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> <p>Referenced by <a class="el" href="_c_open_g_l_scene_8h_source.html#l00224">mrpt::opengl::COpenGLScene::internal_visitAllObjects()</a>.</p> </div> </div> <a class="anchor" id="a8047e96932be100635bab4f27731320f"></a><!-- doxytag: member="CObject.h::IS_DERIVED" ref="a8047e96932be100635bab4f27731320f" args="(ptrObj, class_name)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define IS_DERIVED</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">ptrObj, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">class_name </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   ((ptrObj)->GetRuntimeClass()->derivedFrom(CLASS_ID(class_name)))</td> </tr> </table> </div> <div class="memdoc"> <p>Evaluates to true if the given pointer to an object (derived from <a class="el" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a>) is an instance of the given class or any of its derived classes. </p> <p>Definition at line <a class="el" href="_c_object_8h_source.html#l00117">117</a> of file <a class="el" href="_c_object_8h_source.html">CObject.h</a>.</p> </div> </div> </div> <br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150"> </td></tr> </table> </body></html>