2009-09-09 7 views
1

J'essaye de surcharger les opérateurs d'une classe C++ en utilisant Boost.Python.Comment surcharger les opérateurs avec Boost.Python

Selon this, je le fais de la bonne façon ... mais j'ai un tas d'erreurs de compilation.

est un exemple simple que je fait ici tente de cerner le problème:

#include "boost/python.hpp" 

using namespace boost::python; 

class number 
{ 
public: 
    number(int i) : m_Number(i) { } 
    number operator+(int i) { return number(m_Number + i); } 
private: 
    int m_Number; 
}; 

BOOST_PYTHON_MODULE(test) 
{ 
    class_<number>("number", init<int>()) 
     .def(self() + int()); 
} 

Voici les erreurs du compilateur:

Error 1 error C2064: term does not evaluate to a function taking 0 arguments c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp 16 BoostPythonTest 
Error 2 error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &,const A3 &)' : expects 5 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp 16 BoostPythonTest 
Error 3 error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,Fn,const A1 &,const A2 &)' : expects 4 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp 16 BoostPythonTest 
Error 4 error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,A1,const A2 &)' : expects 3 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp 16 BoostPythonTest 
Error 5 error C2780: 'boost::python::class_<W> &boost::python::class_<W>::def(const char *,F)' : expects 2 arguments - 1 provided c:\users\kevin\documents\visual studio 2008\projects\boostpythontest\boostpythontest\test.cpp 16 BoostPythonTest 

Suis-je manque quelque chose ici?

Merci

Répondre

2

Je n'ai pas utilisé Boost.Python, mais vos erreurs ressemblent il y a des arguments incompatibles quand la magie du modèle tente de lier quelque chose à autre chose.

Je regardé le lien que vous avez fourni, et une différence de taille:

class_<X>("X") 
    .def(self + int()) 

vs le vôtre

class_<number>("number", init<int>()) 
    .def(self() + int()); 

je suppose, self et self() pourrait le faire.

+0

Vous avez totalement raison ... oups. Merci! – Kevin

Questions connexes