Somehow putting the templates in the same type system.xml solved the 
> insert-template referring to non-existing template 'stdListToPyList'


Now when calling my function getPluginIDs() from Python, I get a crash in the 
call to convertToPython of std::string, any clue about the crash ?

// C++ to Python conversion for type 'std::list<std::string >'.
static PyObject* std_list_std_string__CppToPython_std_list_std_string_(const 
void* cppIn) {
    ::std::list<std::string >& cppInRef = *((::std::list<std::string >*)cppIn);

                    // TEMPLATE - stdListToPyList - START
            PyObject* pyOut = PyList_New((int) cppInRef.size());
            ::std::list<std::string >::const_iterator it = cppInRef.begin();
            for (int idx = 0; it != cppInRef.end(); ++it, ++idx) {
            ::std::string cppItem(*it);
            PyList_SET_ITEM(pyOut, idx, 

// CRASHING IN THE FOLLOWING LINE
Shiboken::Conversions::copyToPython(Shiboken::Conversions::PrimitiveTypeConverter<std::string>(),
 &cppItem));
            }
            return pyOut;
        // TEMPLATE - stdListToPyList - END

}



> On 22 Oct 2014, at 14:29, Alexandre <alexandre.gauthier-foic...@inria.fr> 
> wrote:
> 
> Hi Tom,
> 
> Thank you for your quick answer.
> Indeed with the wrapper around global functions I could make it work!;)
> 
> However I still don’t understand one thing:
> 
> If I supplied the a conversion for std::list and for std::string, do I need 
> to also provide a conversion for std::list<std::string> ?
> 
> My function signature is the following:
> 
> inline std::list<std::string>
> getPluginIDs()
> {
>    // Code logic
> }
> 
> 
>  I’m declaring it in the type system this way:
> <function signature="getPluginIDs()"/>
> 
> 
> std::list and std::string conversion are declared as told in the previous 
> mail. 
> The generated code by Shiboken looks like this, with empty functions:
> 
> // C++ to Python conversion for type 'std::list<std::string >'.
> static PyObject* std_list_std_string__CppToPython_std_list_std_string_(const 
> void* cppIn) {
>     ::std::list<std::string >& cppInRef = *((::std::list<std::string 
> >*)cppIn);
> 
> 
> 
> }
> static void std_list_std_string__PythonToCpp_std_list_std_string_(PyObject* 
> pyIn, void* cppOut) {
>     ::std::list<std::string >& cppOutRef = *((::std::list<std::string 
> >*)cppOut);
> 
> 
> 
> }
> 
> 
> And I get the following warning:
> insert-template referring to non-existing template 'stdListToPyList'
> Any clue on what might cause this ?
> 

_______________________________________________
PySide mailing list
PySide@qt-project.org
http://lists.qt-project.org/mailman/listinfo/pyside

Reply via email to