Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
boost_python [2008/04/14 20:35] kamituel |
boost_python [2008/04/14 21:00] kamituel |
||
---|---|---|---|
Linia 100: | Linia 100: | ||
virtual void metoda ( std::string suffix ) { | virtual void metoda ( std::string suffix ) { | ||
this->get_override("metoda")(); | this->get_override("metoda")(); | ||
+ | // Dla kompilatora MSVC należy zamienić powyższą linijkę na: | ||
+ | // this->get_override("metoda").ptr(); | ||
} | } | ||
}; | }; | ||
Linia 197: | Linia 199: | ||
* Mamy dostęp do biblioteki C++, ale nie mamy do niej źródeł | * Mamy dostęp do biblioteki C++, ale nie mamy do niej źródeł | ||
W tym ostatnim przypadku jedyne co nam będzie potrzebne to pliki nagłówkowe tej bilioteki i parę minut czasu. | W tym ostatnim przypadku jedyne co nam będzie potrzebne to pliki nagłówkowe tej bilioteki i parę minut czasu. | ||
- | Weźmy klasy z poprzedniego przykładu, rozdzielmy je na plik nagłówkowy i źródłowy. Źródłowy skompilujmy do postaci biblioteki współdzielonej: | + | Weźmy klasy z poprzedniego przykładu, rozdzielmy je na plik nagłówkowy i źródłowy. |
+ | |||
+ | Plik nagłówkowy wyglądać może tak: | ||
+ | <code cpp> | ||
+ | class Costam_0 { | ||
+ | public: | ||
+ | virtual void metoda ( std::string suffix ) = 0; | ||
+ | virtual ~Costam_0 (); | ||
+ | }; | ||
+ | |||
+ | class Costam_A : public Costam_0 { | ||
+ | public: | ||
+ | Costam_A(); | ||
+ | Costam_A( std::string nazwa ); | ||
+ | virtual void metoda ( std::string suffix ); | ||
+ | std::string daj_nazwe () const; | ||
+ | void ustaw_nazwe ( const std::string nazwa ); | ||
+ | protected: | ||
+ | std::string nazwa_; | ||
+ | }; | ||
+ | |||
+ | class Costam_B : public Costam_A { | ||
+ | public: | ||
+ | Costam_B(); | ||
+ | Costam_B( std::string nazwa ); | ||
+ | virtual void metoda ( std::string suffix ); | ||
+ | Costam_B& operator+ ( std::string x ); | ||
+ | |||
+ | std::string x_; | ||
+ | }; | ||
+ | </code> | ||
+ | |||
+ | Plik źródłowy skompilujmy do postaci biblioteki współdzielonej: | ||
<code> | <code> | ||
$ g++ -Wall -shared p2-shared.cpp -o p2-shared.o | $ g++ -Wall -shared p2-shared.cpp -o p2-shared.o | ||
Linia 236: | Linia 270: | ||
</code> | </code> | ||
I gotowe! Możemy teraz uruchomić skrypt z poprzedniego przykładu. A to wszystko bez dostępu do plików źródłowych! | I gotowe! Możemy teraz uruchomić skrypt z poprzedniego przykładu. A to wszystko bez dostępu do plików źródłowych! | ||
+ | \\ (w rzeczywistej sytuacji plik p2-shared.o byłby biblioteką której źródeł nie mamy - jak widać nawet pomimo tego udało się wystawić ją jako moduł Pythona) | ||
==== Więcej informacji ==== | ==== Więcej informacji ==== |