X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?a=blobdiff_plain;f=ginac%2Fprint.h;h=dccaecd889bcdd8ceb4a0a6a5d52aa322f3a8600;hb=6d7bf9ee5a7ce05cb3a23dae664e781d7325d7b8;hp=6b80d488dded42fbacb017bf8ad7bb53e6c0568b;hpb=052d42fd9eb8b7e59eff497da98e1f58cde413a4;p=ginac.git diff --git a/ginac/print.h b/ginac/print.h index 6b80d488..dccaecd8 100644 --- a/ginac/print.h +++ b/ginac/print.h @@ -69,19 +69,23 @@ public: \ typedef supername inherited; \ friend class function_options; \ friend class registered_class_options; \ -private: \ - static GiNaC::print_context_class_info reg_info; \ public: \ - virtual const GiNaC::print_context_class_info &get_class_info() const { return reg_info; } \ - virtual const char *class_name() const { return reg_info.options.get_name(); } \ + static const GiNaC::print_context_class_info &get_class_info_static(); \ + virtual const GiNaC::print_context_class_info &get_class_info() const { return classname::get_class_info_static(); } \ + virtual const char *class_name() const { return classname::get_class_info_static().options.get_name(); } \ \ classname(); \ - classname * duplicate() const { return new classname(*this); } \ + virtual classname * duplicate() const { return new classname(*this); } \ private: /** Macro for inclusion in the implementation of each print_context class. */ #define GINAC_IMPLEMENT_PRINT_CONTEXT(classname, supername) \ - GiNaC::print_context_class_info classname::reg_info = GiNaC::print_context_class_info(print_context_options(#classname, #supername, next_print_context_id++)); +const GiNaC::print_context_class_info &classname::get_class_info_static() \ +{ \ + static GiNaC::print_context_class_info reg_info = GiNaC::print_context_class_info(GiNaC::print_context_options(#classname, #supername, GiNaC::next_print_context_id++)); \ + return reg_info; \ +} + extern unsigned next_print_context_id;