[C++-sig] Instantiated template class exported to python

Nicolas.Rougier at loria.fr Nicolas.Rougier at loria.fr
Mon Feb 13 21:52:08 CET 2006



Hello,


I'm trying to define a template class such that I can export
instantiated derived classed with boost. I tried the code included
at the end of this message but it doesn't compile. Error is:

/usr/include/boost/python/object/value_holder.hpp:157: error: no
matching function for call to ‘VecInt::VecInt(PyObject*&, const
VecInt&)’
core.cc:17: note: candidates are: VecInt::VecInt(const VecInt&)
core.cc:17: note:                 VecInt::VecInt()


I do not quite understand why compiler doesn't found Vec constructors.
Is there something I misunderstood about templates or is there some
misconception in my code (and what would be the right way to do it in
that case) ?


Nicolas




CODE
--------
#include <vector>
#include <boost/python.hpp>

using namespace boost;
using namespace boost::python;

template <class T> class Vec : public std::vector<T> {
public:
    Vec (PyObject *self);
    Vec (PyObject *self, const Vec &other);
};

class VecInt : public Vec<int> {};


class VecInt2 {
public:
    VecInt2 (PyObject *self);
    VecInt2 (PyObject *self, const VecInt2 &other);
};



namespace boost {
    namespace python {
        template <>struct has_back_reference<VecInt> : mpl::true_ {};
        template <>struct has_back_reference<VecInt2> : mpl::true_ {};
    }
}

BOOST_PYTHON_MODULE(core)
{
    class_<VecInt> ("VecInt", init<> ());
    //class_<VecInt2> ("VecInt2", init<> ());
}



More information about the Cplusplus-sig mailing list