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
00041
00042 namespace detail
00043 {
00044 template <class POSEORPOINT> struct T3DTypeHelper;
00045
00046 template <> struct T3DTypeHelper<CPoint2D> { enum { is_3D_val = 0 }; };
00047 template <> struct T3DTypeHelper<CPoint3D> { enum { is_3D_val = 1 }; };
00048 template <> struct T3DTypeHelper<CPose2D> { enum { is_3D_val = 0 }; };
00049 template <> struct T3DTypeHelper<CPose3D> { enum { is_3D_val = 1 }; };
00050 template <> struct T3DTypeHelper<CPose3DQuat> { enum { is_3D_val = 1 }; };
00051
00052
00053
00054 template <class DERIVEDCLASS, int IS3D> struct pose_point_impl;
00055
00056
00057 template <class DERIVEDCLASS> struct pose_point_impl<DERIVEDCLASS,1>
00058 {
00059 inline double z() const { return static_cast<const DERIVEDCLASS*>(this)->m_coords[2]; }
00060 inline double &z() { return static_cast<DERIVEDCLASS*>(this)->m_coords[2]; }
00061 inline void z(const double v) { static_cast<DERIVEDCLASS*>(this)->m_coords[2]=v; }
00062 inline void z_incr(const double v) { static_cast<DERIVEDCLASS*>(this)->m_coords[2]+=v; }
00063 };
00064
00065
00066 template <class DERIVEDCLASS> struct pose_point_impl<DERIVEDCLASS,0>
00067 {
00068 };
00069
00070 }
00071 }
00072 }
00073
00074 #endif