#ifndef slic3r_perlglue_hpp_ #define slic3r_perlglue_hpp_ namespace Slic3r { template struct ClassTraits { static const char* name; static const char* name_ref; }; #define REGISTER_CLASS(cname,perlname) \ class cname; \ template <>const char* ClassTraits::name = "Slic3r::" perlname; \ template <>const char* ClassTraits::name_ref = "Slic3r::" perlname "::Ref"; template const char* perl_class_name(const T*) { return ClassTraits::name; } template const char* perl_class_name_ref(const T*) { return ClassTraits::name_ref; } template class Ref { T* val; public: Ref() {} Ref(T* t) : val(t) {} operator T*() const {return val; } static const char* CLASS() { return ClassTraits::name_ref; } }; template class Clone { T* val; public: Clone() {} Clone(T* t) : val(new T(*t)) {} Clone(const T& t) : val(new T(t)) {} operator T*() const {return val; } static const char* CLASS() { return ClassTraits::name; } }; }; #endif