00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 00005 #ifndef BALL_CONCEPT_VISITOR_H 00006 #define BALL_CONCEPT_VISITOR_H 00007 00008 #ifndef BALL_COMMON_H 00009 # include <BALL/common.h> 00010 #endif 00011 00012 namespace BALL 00013 { 00014 00021 template <typename Host> 00022 class Visitor 00023 { 00024 public: 00025 00031 Visitor() 00032 ; 00033 00036 Visitor(const Visitor& visitor) 00037 ; 00038 00041 virtual ~Visitor() 00042 ; 00043 00045 00050 virtual void visit(Host &) = 0; 00051 00052 virtual void dummy(); 00053 }; 00055 00056 template <typename T> 00057 void Visitor<T>::dummy(){} 00058 00059 template <typename T> 00060 BALL_INLINE 00061 Visitor<T>::Visitor() 00062 00063 { 00064 } 00065 00066 template <typename Host> 00067 BALL_INLINE 00068 Visitor<Host>::Visitor(const Visitor<Host>& /* visitor */) 00069 00070 { 00071 } 00072 00073 template <typename T> 00074 Visitor<T>::~Visitor() 00075 00076 { 00077 } 00078 } 00079 00080 #endif // BALL_CONCEPT_VISITOR_H