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 #ifndef CEYLAN_VISITABLE_H_
00028 #define CEYLAN_VISITABLE_H_
00029
00030
00031 #include "CeylanException.h"
00032
00033 #include <string>
00034
00035
00036
00037 namespace Ceylan
00038 {
00039
00040
00041
00046 class CEYLAN_DLL VisitException : public Ceylan::Exception
00047 {
00048
00049 public:
00050
00051 explicit VisitException( const std::string & reason ) ;
00052
00053 virtual ~VisitException() throw() ;
00054
00055 } ;
00056
00057
00058
00059
00060
00061 class Visitor ;
00062
00063
00064
00072 class CEYLAN_DLL Visitable
00073 {
00074
00075 public:
00076
00077
00078
00080 Visitable() ;
00081
00082
00083
00085 virtual ~Visitable() throw() ;
00086
00087
00088
00101 virtual void accept( Visitor & visitor ) = 0 ;
00102
00103
00104
00105 private:
00106
00107
00117 Visitable( const Visitable & source ) ;
00118
00119
00127 Visitable & operator = ( const Visitable & source ) ;
00128
00129
00130 } ;
00131
00132 }
00133
00134
00135
00136 #endif // CEYLAN_VISITABLE_H_
00137