\
class classname : public super { \
public: \
typedef classname Self; \
typedef super Superclass; \
classname() {} \
virtual ~classname() override = default; \
virtual const char * GetEventName() const override { return #classname; } \
virtual bool CheckEvent(const ::gdcm::Event* e) const override \
{ return dynamic_cast<const Self*>(e) ? true : false; } \
virtual ::gdcm::Event* MakeObject() const override \
{ return new Self; } \
classname(const Self&s) : super(s){} \
private: \
void operator=(const Self&); \
}