+template <class Interface>
+class Grob_interface
+{
+public:
+ Grob_interface ()
+ {
+ add_scm_init_func (Grob_interface::init);
+ }
+
+private:
+ static void init ()
+ {
+ interface_symbol_ = ::add_interface (cxx_name_, description_, variables_);
+ }
+
+ template <class T>
+ friend bool has_interface(Grob *);
+
+private:
+ static SCM interface_symbol_;
+ static char const *cxx_name_;
+ static char const *description_;
+ static char const *variables_;
+};
+
+template <class Interface>
+SCM Grob_interface<Interface>::interface_symbol_;
+