[C++-sig] Boost.Python: wrapping classes instead of functions???

David Roy david.roy.perso at gmail.com
Thu Sep 10 12:20:17 CEST 2009


Hi,

I'm facing a very strange behavior that I cannot manage to explane.
I'm currently working on a project of re-implementing Python functions in
C++ in order to improve performance and I'm then creating Python extensions
thanks to Boost.
I implemented quite a heavy function that calculates tangents and binormals
this way:

class GeomUtils
{
private:
    // some functions...
public:
    AddTangentAndBinormals();
}

GeomUtils::AddtangentAndBinormals()
{
    // call some functions...
}

BOOST_PYTHON_MODULE(geom_utils)
{
    class_<GeomUtils>("GeomUtils", init<>())
        .def("AddTangentAndBinormals", &GeomUtils::AddTangentAndBinormals)
        ;
}

This was very successful, decreasing the computation time from 54.0 seconds
to less than 1.0 second.
Then I decided this wasn't worth a class and that I should directly export
the function :

AddTangentAndBinormals()
{
    // call some functions...
}

BOOST_PYTHON_MODULE(geom_utils)
{
    def("AddTangentAndBinormals", &AddTangentAndBinormals);
}

and the profile was back to 54.0 seconds!!!
Please could someone help me understand what's the difference and the
mechanism underlying that?

Thanks
-David
-- 
View this message in context: http://www.nabble.com/Boost.Python%3A-wrapping-classes-instead-of-functions----tp25380730p25380730.html
Sent from the Python - c++-sig mailing list archive at Nabble.com.



More information about the Cplusplus-sig mailing list