Bonjour,
Je voudrais exporter la classe template vector3d vers python:
  • j'ai traduit le code de la classe en python
  • Je voudrais rendre le classe python convertible en classe C++ et vice-versa
en C++ et je voudrais la faire convertible en liste python (et vice-versa).
Je sais comment rendre une classe basiques convertible mais j'ai un problème avec lec templates.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/* simplifié : */
template<class T>
class vector3d
{
public:
    T X, Y, Z;
 
    vector3d(): X(0), Y(0), Z(0) {}
 
    ~vector3d() {}
 
    T getLength()
    {
        return std::sqrt(X*X+Y*Y+Z*Z);
    }
};
et en python:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
class vector3d
	def __init__(self):
		self.X = self.Y = self.Z = 0
 
	def getLength(self):
		return math.sqrt(self.X**2 + self.Y**2 + self.Z**2)
Je voudrais que le boost.python reconnaisse la classe python et la convertisse automatiquement selon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
template<class T>
vector3d<T> &from_python(boost::python::object &obj)
{
	namespace bp = boost::python;
	vector3d<T> vec;
	vec.X = bp::extract<T>(obj.attr("X"))();
	vec.Y = bp::extract<T>(obj.attr("Y"))();
	vec.Z = bp::extract<T>(obj.attr("Z"))();
	return vec;
}
Merci.