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 <[email protected]>
> 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
[email protected]
http://lists.qt-project.org/mailman/listinfo/pyside