00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef COH_TYPED_CLASS_HPP
00017 #define COH_TYPED_CLASS_HPP
00018
00019 #include "coherence/lang/compatibility.hpp"
00020
00021 #include "coherence/lang/AbstractTypedClass.hpp"
00022 #include "coherence/lang/Class.hpp"
00023 #include "coherence/lang/IllegalArgumentException.hpp"
00024 #include "coherence/lang/Object.hpp"
00025 #include "coherence/lang/String.hpp"
00026
00027
00028 #include <typeinfo>
00029
00030 COH_OPEN_NAMESPACE2(coherence,lang)
00031
00032
00033
00034
00035
00036
00037
00038
00039 template<class T> class TypedClass
00040 : public class_spec<TypedClass<T>,
00041 extends<AbstractTypedClass<T> > >
00042 {
00043 friend class factory<TypedClass<T> >;
00044
00045
00046
00047 public:
00048
00049
00050
00051 typedef T Type;
00052
00053
00054
00055
00056 protected:
00057
00058
00059
00060 TypedClass<T>()
00061 {
00062 }
00063
00064 private:
00065
00066
00067
00068 TypedClass<T>(const TypedClass<T>&);
00069
00070
00071
00072
00073 public:
00074
00075
00076
00077 virtual Object::Handle newInstance(ObjectArray::View vaParam) const
00078 {
00079 if (vaParam == NULL || vaParam->length == 0)
00080 {
00081 return T::create();
00082 }
00083 return AbstractTypedClass<T>::newInstance(vaParam);
00084 }
00085
00086
00087
00088
00089 public:
00090
00091
00092
00093 virtual TypedHandle<const String> toString() const
00094 {
00095 return COH_TO_STRING("TypedClass<" << Class::getName() << ">");
00096 }
00097 };
00098
00099 COH_CLOSE_NAMESPACE2
00100
00101 #endif // COH_TYPED_CLASS_HPP