Gnafoo
2005-05-05, 14:36:24
Hi
Ich arbeite gerade an einem Programm, welches zum einen in C++ geschrieben ist und zum anderen Ruby als Sprache nutzt. Die Schnittstelle zwischen beiden Sprachen lasse ich mir von SWIG (http://www.swig.org) generieren.
Dabei wird eine C++ Datei generiert, welche auf den eigentlichen C++-Code meines Programmes in Form einer statischen Library zugreift. Der generierte Code wird zum Erstellen einer dynamischen Library benutzt, welche dann von Ruby geladen wird um die Klassen etc. bereitzustellen.
Die dabei generierte C++ Datei inkludiert (sagt man das so? :D) nun ganz am Anfang "ruby.h", um die Klassen etc. an Ruby weitergeben zu können. "ruby.h" wiederum definiert mehrere Macros, welche später zu Problemen führen, sobald ich die Header-Files zu Ogre (http://www.ogre3d.org), welches ich im eigentlichen C++-Code nutze inkludiere. Die Makros kann ich aber so einfach nicht umgehen.
Die Klassendefinition (Application.h), um die es dabei geht sieht wie folgt aus:
#include <Ogre.h>
class Application : public Ogre::Singleton<Application>
{
public:
Application(void);
virtual ~Application(void);
static Application& getSingleton(void);
static Application* getSingletonPtr(void);
void enterMainLoop(void);
};
So jetzt kann ich das aber umgehen, indem ich nicht diese Headerdatei im Wrappercode inkludiere, sondern die Klasse direkt dort definiere, aber wie bei einem Interface nur die Methoden etc. definiere, auf die ich auch von Ruby aus zugreifen müsste. Das würde wie folgt aussehen:
class Application
{
public:
Application(void);
virtual ~Application(void);
void enterMainLoop(void);
};
Dabei fällt die Abhängigkeit von Ogre.h weg (Die zugrundeliegende Grafikengine interessiert mich in Ruby auch überhaupt nicht) und die Header-Dateien, welche später aufgrund der Makros Probleme bereiten fallen so auch weg.
Allerdings wüsste ich ganz gerne, ob es überhaupt legal ist, sozusagen externe Klassen zu definieren, aber dabei nur einen Teil der Definition zu berücksichtigen?
Ich arbeite gerade an einem Programm, welches zum einen in C++ geschrieben ist und zum anderen Ruby als Sprache nutzt. Die Schnittstelle zwischen beiden Sprachen lasse ich mir von SWIG (http://www.swig.org) generieren.
Dabei wird eine C++ Datei generiert, welche auf den eigentlichen C++-Code meines Programmes in Form einer statischen Library zugreift. Der generierte Code wird zum Erstellen einer dynamischen Library benutzt, welche dann von Ruby geladen wird um die Klassen etc. bereitzustellen.
Die dabei generierte C++ Datei inkludiert (sagt man das so? :D) nun ganz am Anfang "ruby.h", um die Klassen etc. an Ruby weitergeben zu können. "ruby.h" wiederum definiert mehrere Macros, welche später zu Problemen führen, sobald ich die Header-Files zu Ogre (http://www.ogre3d.org), welches ich im eigentlichen C++-Code nutze inkludiere. Die Makros kann ich aber so einfach nicht umgehen.
Die Klassendefinition (Application.h), um die es dabei geht sieht wie folgt aus:
#include <Ogre.h>
class Application : public Ogre::Singleton<Application>
{
public:
Application(void);
virtual ~Application(void);
static Application& getSingleton(void);
static Application* getSingletonPtr(void);
void enterMainLoop(void);
};
So jetzt kann ich das aber umgehen, indem ich nicht diese Headerdatei im Wrappercode inkludiere, sondern die Klasse direkt dort definiere, aber wie bei einem Interface nur die Methoden etc. definiere, auf die ich auch von Ruby aus zugreifen müsste. Das würde wie folgt aussehen:
class Application
{
public:
Application(void);
virtual ~Application(void);
void enterMainLoop(void);
};
Dabei fällt die Abhängigkeit von Ogre.h weg (Die zugrundeliegende Grafikengine interessiert mich in Ruby auch überhaupt nicht) und die Header-Dateien, welche später aufgrund der Makros Probleme bereiten fallen so auch weg.
Allerdings wüsste ich ganz gerne, ob es überhaupt legal ist, sozusagen externe Klassen zu definieren, aber dabei nur einen Teil der Definition zu berücksichtigen?