Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef CPOSEORPOINT_DETAIL_H
00029 #define CPOSEORPOINT_DETAIL_H
00030
00031 namespace mrpt
00032 {
00033 namespace poses
00034 {
00035 class CPoint2D;
00036 class CPoint3D;
00037 class CPose2D;
00038 class CPose3D;
00039 class CPose3DQuat;
00040 class CPose3DRotVec;
00041
00042
00043 namespace detail
00044 {
00045 template <class POSEORPOINT> struct T3DTypeHelper;
00046
00047 template <> struct T3DTypeHelper<CPoint2D> { enum { is_3D_val = 0 }; };
00048 template <> struct T3DTypeHelper<CPoint3D> { enum { is_3D_val = 1 }; };
00049 template <> struct T3DTypeHelper<CPose2D> { enum { is_3D_val = 0 }; };
00050 template <> struct T3DTypeHelper<CPose3D> { enum { is_3D_val = 1 }; };
00051 template <> struct T3DTypeHelper<CPose3DQuat> { enum { is_3D_val = 1 }; };
00052 template <> struct T3DTypeHelper<CPose3DRotVec> { enum { is_3D_val = 1 }; };
00053
00054
00055 template <class DERIVEDCLASS, int IS3D> struct pose_point_impl;
00056
00057
00058 template <class DERIVEDCLASS> struct pose_point_impl<DERIVEDCLASS,1>
00059 {
00060 inline double z() const { return static_cast<const DERIVEDCLASS*>(this)->m_coords[2]; }
00061 inline double &z() { return static_cast<DERIVEDCLASS*>(this)->m_coords[2]; }
00062 inline void z(const double v) { static_cast<DERIVEDCLASS*>(this)->m_coords[2]=v; }
00063 inline void z_incr(const double v) { static_cast<DERIVEDCLASS*>(this)->m_coords[2]+=v; }
00064 };
00065
00066
00067 template <class DERIVEDCLASS> struct pose_point_impl<DERIVEDCLASS,0>
00068 {
00069 };
00070
00071 }
00072 }
00073 }
00074
00075 #endif