-#define DECLARE_GROB_INTERFACE() \
- static SCM interface_symbol_; \
- static bool has_interface (Grob*)
-
-#define ADD_INTERFACE(cl, b, c) \
- SCM cl::interface_symbol_; \
- bool cl::has_interface (Grob *me) \
- { \
- return me->internal_has_interface (interface_symbol_); \
- } \
- void cl ## _init_ifaces () \
- { \
- cl::interface_symbol_ = add_interface (#cl, b, c); \
- } \
- ADD_SCM_INIT_FUNC (cl ## ifaces, cl ## _init_ifaces);
+class Grob;
+
+#define ADD_INTERFACE(cl, b, c) \
+ Grob_interface<cl> cl ## _interface_initializer; \
+ template <> char const *Grob_interface<cl>::cxx_name_ (#cl); \
+ template <> char const *Grob_interface<cl>::description_ (b); \
+ template <> char const *Grob_interface<cl>::variables_ (c);