background image

Ωστόσο, η διαδικασία διασύνδεσης C++ και Python δεν είναι τετριμμένη. Η C++ επιτρέπει

εκτεταμένη χρήση:

• templates

• pointers και references

• overloading συναρτήσεων

• custom memory management

• σύνθετων δομών δεδομένων

Τα χαρακτηριστικά αυτά δεν αντιστοιχούν πάντα άμεσα στο δυναμικό μοντέλο τύπων της

Python. Η pybind11 απλοποιεί σημαντικά τη διαδικασία αυτή, παρέχοντας:

• Αυτόματη μετατροπή βασικών τύπων (int, float, std::string)

• Υποστήριξη STL containers (std::vector, std::map)

• Διαχείριση ownership και lifetime αντικειμένων

• Μηχανισμούς έκθεσης κλάσεων με μεθόδους και ιδιότητες

Με τον τρόπο αυτό καθίσταται δυνατή η δημιουργία ενός Python API που αντικατοπτρίζει

τη δομή της C++ μηχανής, διατηρώντας παράλληλα τον έλεγχο απόδοσης στον πυρήνα της

εφαρμογής. Παρακάτω ένα μικρό τεχνικό παράδειγμα binding.

PYBIND11_MODULE(engine, m)

{

py::class_<Entity>(m, "Entity")

.def("get_transform", &Entity::get_transform);

}

Αυτό μεταφράζεται στην Python σε:

entity.get_transform()

4.8.2

Χρήση

Έτσι λειπόν το Python API επιτρέπει στον χρήστη :

• Να δημιουργεί και να εκτελεί ένα αντικείμενο της κλάσης (application).

• Να δημιουργεί επίπεδα (Layers), όπως για παράδειγμα επίπεδο διεπαφής χρήστη (UI

Layer) ή επίπεδο λογικής παιχνιδιού (Game Logic Layer).

43