#ifndef Rice__Director__hpp_ #define Rice__Director__hpp_ #include "cpp_api/Object.hpp" namespace Rice { /** * A Director works exactly as a SWIG %director works (thus the name). * You use this class to help build proxy classes so that polymorphism * works from C++ into Ruby. See the main README for how this class works. */ class Director { public: //! Construct new Director. Needs the Ruby object so that the // proxy class can call methods on that object. Director(Object self) : self_(self) { } virtual ~Director() = default; //! Raise a ruby exception when a call comes through for a pure virtual method /*! If a Ruby script calls 'super' on a method that's otherwise a pure virtual * method, use this method to throw an exception in this case. */ void raisePureVirtual() const { rb_raise(rb_eNotImpError, "Cannot call super() into a pure-virtual C++ method"); } //! Get the Ruby object linked to this C++ instance Object getSelf() const { return self_; } private: // Save the Ruby object related to the instance of this class Object self_; }; } #endif // Rice__Director__hpp_