On Tue, Dec 2, 2008 at 7:04 PM, Mihail Konstantinov
<[EMAIL PROTECTED]> wrote:
> Dear all,
> thanks a lot for your immediate responses that lead to a fast solution for my 
> previous problem.
>
> Here comes the next one.
>
> In the example below both classes A and B are derived from std::string.

It is not a good idea. Python string is immutable. May be you should
consider custom converter.
http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/faq.html#custom_string

>Class B can be implicitly converted to A by means of 'B::operator const A()'. 
>So the function printme(const A&) can also be called with an argument of class 
>B (see main function).
>
> My aim is to be able to call in python:
>>>>import boost_ext
>>>>b=boost_ext.B("hello world")
>>>>boost_ext.printme(b)
> but it produces the error:
>> <class 'Boost.Python.ArgumentError'>: Python argument types in  
>> boost_ext.printme(B)
>> did not match C++ signature:
>>    printme(A)
>
> Can I modify the declaration inside BOOST_PYTHON_MODULE so that the implicit 
> conversion is recognized and the above call boost_ext.printme(b) succeeds?

Yes: http://www.boost.org/doc/libs/1_37_0/libs/python/doc/v2/implicit.html

> Thank you
> Mihail
>
> BTW, in the code below I'm using a preprocessor definition __BJAM__ which I 
> had to define explicitly in the Jamroot. Is there some variable defined by 
> default which I can use to distinguish between bjam builds and other 
> (testing) calls to g++?

You can separate your source code to different files.


-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to