mandag, november 19, 2007

Embedding python in C++

Så er det lykkedes at definere en C++ klasse, exportere den til Python. Oprette en liste af objecter af denne klasse i python og kalde en exportet function fra C++ hvor denne liste gives med. Denne function i C++ modtager nu listen og gennemløber denne for at udskrive elementer i denne.

C++ klassen:

class Point3D {
public:
double x, y, z;
Point3D(double cx, double cy, double cz) : x(cx), y(cy), z(cz) {};
};


C++ callback functionen

void printListPoint(object const& ob) {
stl_input_iterator begin(ob), end;
std::list il(begin, end);
for (std::list::iterator itr = il.begin(); itr != il.end() ; itr++) {
std::cout << (*itr).x << std::endl;
}
}


Export af functionen fra C++ til Python

BOOST_PYTHON_MODULE(hello)
{
def("printPointList", &printListPoint);

class_("Point3D", init())
.def_readonly("x", &OpenEngine::Scripting::PythonTest::Point3D::x)
.def_readonly("y", &OpenEngine::Scripting::PythonTest::Point3D::y)
.def_readonly("z", &OpenEngine::Scripting::PythonTest::Point3D::z)
;
}


Python coden der bliver kaldt:

import hello

p1 = hello.Point3D(1.1, 2.2, 3.3)
p2 = hello.Point3D(2.1, 6.2, 7.3)
p3 = hello.Point3D(3.1, 7.2, 8.3)
p4 = hello.Point3D(4.1, 8.2, 9.3)

pl = [p1, p2, p3, p4]

hello.printPointList(pl)


Output fra dette script!!

1.1
2.1
3.1
4.1


Som det kan ses så har vi oprettet nogle objecter i python, som vi så har sendt tilbage til C++, så vi der kan arbede videre med dem!

Næste skridt... i C++ lave instancer af nogle nogle python definerede klasser!!

Ingen kommentarer: