On Mon, Jan 31, 2005 at 02:01:56PM +0100, Benjamin Schmeling wrote:
> Hi,
> 
> I am working on exposing a bigint class to python.  Now I've got the 
> problem that methods which take an bigint as
> an parameter do not accept Python longs.
> 
> For example:
> import _PythonLiDIA
> x=123L;
> c=_PythonLiDIA.bigint();
> _PythonLiDIA.gcd(c,x);
> 
> 
> Traceback (most recent call last):
> File "test.py", line 132, in ?
>  _PythonLiDIA.gcd(a,x);
> Boost.Python.ArgumentError: Python argument types in
>  _PythonLiDIA.gcd(bigint, long)
> did not match C++ signature:
>  gcd(LiDIA::bigint, LiDIA::bigint)
> 
> I don't know how to achieve implicit conversion at this point, turning an
> long automatically into an bigint. The other way round, turning an bigint
> into long can be realized by defining __long__.
> 
> Can someone help me please?

as later on you say you have a constructor to convert longs into your
bigints, you should add a __coerce__ method to your class.

General description of __coerce__:

  http://docs.python.org/ref/numeric-types.html#l2h-303

details on coercion rules:

  http://docs.python.org/ref/coercion-rules.html

enjoy.

-- 
John Lenton ([EMAIL PROTECTED]) -- Random fortune:
BOFH excuse #309:

firewall needs cooling

Attachment: signature.asc
Description: Digital signature

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to