[C++-sig] Wrapping std::vector<int> with boost::python::list

fjanoos fjanoos at yahoo.com
Tue Aug 9 23:17:08 CEST 2011


Hello,

I'm new to boost::python and was having trouble wrapping a C++ function of
the form 
 void FindVCs(int vId, vector<int>& vcs);

Here vcs is allocated in the caller and populated by FindVCs. 

Initially, I considered wrapping it something like this:

	boost::python::list* FindVCs_wrap(int vid)
	{
		vector<int> vcs;
		
               FindVCs(vid,vcs);
		//wrap and return
		boost::python::list* out_list = new boost::python::list;
		unsigned int num_elems = vcs.size();
		for( unsigned int idx = 0; idx < num_elems; idx++){
			out_list->append(vcs[idx]);
		}
		return out_list;
	}

however, this gives me compile time errors 
Error	5	error C2027: use of undefined type
'boost::python::detail::specify_a_return_value_policy_to_wrap_functions_returning<T>'	

Then I change the return type to

boost::shared_ptr<boost::python::list> FindVCs_wrap(int vid)
{
 ...
        return boost::shared_ptr<boost::python::list>(out_list);
}

This compiles fine but then at runtime Python raises:

TypeError: No to_python (by-value) converter found for C++ type: class
boost::shared_ptr<class boost
::python::list>


Any ideas of what I am doing wrong ? Also, it is possible to instantiate and
directly return a std::vector<int> object from Python without going through
the boost::python::list object ? 

I've been googling this for 2 days and I can't seem to find any relevant
information. Any pointers would be appreciated.

thanks,
-fj




--
View this message in context: http://boost.2283326.n4.nabble.com/Wrapping-std-vector-int-with-boost-python-list-tp3731281p3731281.html
Sent from the Python - c++-sig mailing list archive at Nabble.com.


More information about the Cplusplus-sig mailing list