I tried adding:

  implicitly_convertible<DocumentWrap,Document>();
  implicitly_convertible<Document,DocumentWrap>();

but it doesn't appear to change anything. I would apreciate any idea
on thes regard.

Thanks again!

On Thu, Jun 25, 2009 at 3:31 AM, Nicolas Lara<nicolasl...@gmail.com> wrote:
> Hello,
>
> I'm having trouble trying to override a method on a class exposed to
> Python. I cannot modify the original class, so I need to wrap it to
> change the behaviour of some methods to be Python compatible. The
> classes look like the following:
>
> struct DocumentWrap : Document, wrapper<Document>
> {
>  DocumentWrap() : Document(){ };
>  DocumentWrap(const Document&) { };
>  wstring toString()
>  {
>    wstring w(_T("test"));
>    return w;
>  }
>  int test(){
>    return 1;
>  }
> };
>
>  class_<Hits>("Hits", init<int>())
>    .def("doc", &Hits::doc, return_internal_reference<>());
>  class_<DocumentWrap>("Document")
>    .def("toString", &DocumentWrap::toString)
>    .def("test", &DocumentWrap::test)
>    ;
>
> Hits::doc returns a Document. If I do:
>
>>>> d = Document()
>>>> d.test()
> 1
>>>> d.toString()
> "test"
>
> I get the right answer. However, If I obtain the class through Hits I
> get a reference to a c++ object of type Document (not DocumentWrap) so
> trying to execute the methods yield:
>
> Traceback (most recent call last):
>  File "t.py", line 10, in <module>
>    d.test()
> Boost.Python.ArgumentError: Python argument types in
>    Document.test(Document)
> did not match C++ signature:
>    test(DocumentWrap {lvalue})
>
> Traceback (most recent call last):
>  File "t.py", line 10, in <module>
>    d.toString()
> Boost.Python.ArgumentError: Python argument types in
>    Document.toString(Document)
> did not match C++ signature:
>    toString(DocumentWrap {lvalue})
>
> Is there any way to get python to understand the internal reference to
> Document can be treated as a DocumentWrap?
>
> Thanks in advance!
>
> Best Regards,
>
> --
> Nicolas Lara
> Linux user #380134
> http://nicolas-lara.blogspot.com/
> Public key id: 0x152e7713 at http://subkeys.pgp.net/
>



-- 
Nicolas Lara
Linux user #380134
http://nicolas-lara.blogspot.com/
Public key id: 0x152e7713 at http://subkeys.pgp.net/
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to