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
00029
00030
00031
00033 #ifndef esve_engine_dim3_Make_Frame_hxx
00034 #define esve_engine_dim3_Make_Frame_hxx
00035
00036 #include <esve/engine/dim3/impl/Frame.hxx>
00037 #include <esve/message/impl/Draw_Receiver.hxx>
00038
00039 namespace esve { namespace engine { namespace dim3 {
00040
00051
00052 template< typename T_Target, typename T_Frame = impl::Frame >
00053 class Make_Frame
00054 : virtual public message::impl::Draw_Receiver,
00055 public T_Target,
00056 public T_Frame
00057 {
00058 private:
00059 #if !defined(NDEBUG)
00060 template< class U > static void m_unused( const U & ) { }
00061
00062 void m_requirements_1()
00063 {
00064 T_Target::draw() ;
00065 engine::dim3::Frame* r = dynamic_cast<T_Frame*>(this) ;
00066 m_unused(r) ;
00067 }
00068
00069 struct m_Requirements
00070 {
00071 m_Requirements()
00072 {
00073 typedef void (Make_Frame::*R)() ;
00074 R r = &Make_Frame::m_requirements_1 ;
00075 m_unused(r) ;
00076 }
00077 } m_requirements ;
00078 #endif // !defined(NDEBUG)
00079
00080 Make_Frame( const Make_Frame & ) ;
00081 Make_Frame & operator=( const Make_Frame & ) ;
00082
00083 public:
00085 Make_Frame() ;
00086
00088 template< typename T_Arg >
00089 Make_Frame( T_Arg & arg ) ;
00090
00092 template< typename T_Arg >
00093 Make_Frame( const T_Arg & arg ) ;
00094
00095 ~Make_Frame() ;
00096
00097 protected:
00099 void draw() ;
00100 } ;
00101
00102 }}}
00103
00104 #include <esve/engine/dim3/Make_Frame.template.cxx>
00105
00106 #endif
00107