[C++-sig] boost python and boost/thread.hpp

Guillaume Carbonneau guillaume.carbonneau at gmail.com
Sun Feb 12 19:34:15 CET 2012


Hi,

I'm having compilation errors as soon as I give my classes member variables that come from the boost thread library.
Wrapping those in shared_ptr seems to work.

Any idea why? Is there a special wrapping directive I should give it to?


#include <vector>
#include <boost/python.hpp>
#include <boost/thread.hpp>


struct Hello {
Hello(){}

bool run(int argc, char **argv, char **envp);
std::string hello_string_;
std::vector<std::string> hello_vector_ ;
size_t hello_num_;
boost::shared_ptr<std::string> hello_shared_ptr_string_;
bool hello_bool_;
boost::shared_ptr<boost::condition_variable> condition_variable_shared_ptr_;

// does not compile
//boost::condition_variable condition_variable_;
};


char const* greet()
{
return "hello, world";
}


BOOST_PYTHON_MODULE(hello)
{
using namespace boost::python;
def("greet", greet);
class_<Hello>("Hello");
}




$ make
g++ -c -o hello.o -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6/ -Wall -O3 -fPIC -g hello.cpp
/usr/local/include/boost/python/object/value_holder.hpp: In constructor ‘boost::python::objects::value_holder<Value>::value_holder(PyObject*, A0) [with A0 = boost::reference_wrapper<const Hello>, Value = Hello]’:
/usr/local/include/boost/python/object/make_instance.hpp:71:  instantiated from ‘static Holder* boost::python::objects::make_instance<T, Holder>::construct(void*, PyObject*, boost::reference_wrapper<const T>) [with T = Hello, Holder = boost::python::objects::value_holder<Hello>]’
/usr/local/include/boost/python/object/make_instance.hpp:45:  instantiated from ‘static PyObject* boost::python::objects::make_instance_impl<T, Holder, Derived>::execute(Arg&) [with Arg = const boost::reference_wrapper<const Hello>, T = Hello, Holder = boost::python::objects::value_holder<Hello>, Derived = boost::python::objects::make_instance<Hello, boost::python::objects::value_holder<Hello> >]’
/usr/local/include/boost/python/object/class_wrapper.hpp:29:  instantiated from ‘static PyObject* boost::python::objects::class_cref_wrapper<Src, MakeInstance>::convert(const Src&) [with Src = Hello, MakeInstance = boost::python::objects::make_instance<Hello, boost::python::objects::value_holder<Hello> >]’
/usr/local/include/boost/python/converter/as_to_python_function.hpp:27:  instantiated from ‘static PyObject* boost::python::converter::as_to_python_function<T, ToPython>::convert(const void*) [with T = Hello, ToPython = boost::python::objects::class_cref_wrapper<Hello, boost::python::objects::make_instance<Hello, boost::python::objects::value_holder<Hello> > >]’
/usr/local/include/boost/python/to_python_converter.hpp:87:  instantiated from ‘boost::python::to_python_converter<T, Conversion, has_get_pytype>::to_python_converter() [with T = Hello, Conversion = boost::python::objects::class_cref_wrapper<Hello, boost::python::objects::make_instance<Hello, boost::python::objects::value_holder<Hello> > >, bool has_get_pytype = true]’
/usr/local/include/boost/python/object/class_wrapper.hpp:26:  instantiated from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::maybe_register_class_to_python(T2*, mpl_::false_) [with T2 = Hello, T = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
/usr/local/include/boost/python/object/class_metadata.hpp:229:  instantiated from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_aux2(T2*, Callback) [with T2 = Hello, Callback = boost::integral_constant<bool, false>, T = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
/usr/local/include/boost/python/object/class_metadata.hpp:219:  instantiated from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_aux(void*) [with T = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
/usr/local/include/boost/python/object/class_metadata.hpp:205:  instantiated from ‘static void boost::python::objects::class_metadata<T, X1, X2, X3>::register_() [with T = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
/usr/local/include/boost/python/class.hpp:496:  instantiated from ‘void boost::python::class_<T, X1, X2, X3>::initialize(const DefVisitor&) [with DefVisitor = boost::python::init<mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_, mpl_::void_>, W = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
/usr/local/include/boost/python/class.hpp:629:  instantiated from ‘boost::python::class_<T, X1, X2, X3>::class_(const char*, const char*) [with W = Hello, X1 = boost::python::detail::not_specified, X2 = boost::python::detail::not_specified, X3 = boost::python::detail::not_specified]’
hello.cpp:32:  instantiated from here
/usr/local/include/boost/python/object/value_holder.hpp:137: error: no matching function for call to ‘Hello::Hello(const Hello&)’
hello.cpp:7: note: candidates are: Hello::Hello()
hello.cpp:6: note:  Hello::Hello(Hello&)
make: *** [hello.o] Error 1


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20120212/33b0272c/attachment-0001.html>


More information about the Cplusplus-sig mailing list