ASPN ActiveState Programmer Network
ActiveState
/ Home / Perl / PHP / Python / Tcl / XSLT /
/ Safari / My ASPN /
Cookbooks | Documentation | Mailing Lists | Modules | News Feeds | Products | User Groups


Recent Messages
List Archives
About the List
List Leaders
Subscription Options

View Subscriptions
Help

View by Topic
ActiveState
.NET Framework
Open Source
Perl
PHP
Python
Tcl
Web Services
XML & XSLT

View by Category
Database
General
SOAP
System Administration
Tools
User Interfaces
Web Programming
XML Programming


MyASPN >> Mail Archive >> cpp-sig
cpp-sig
Re: [C++-sig] Static, again...
by Nicodemus other posts by this author
Dec 5 2002 4:30AM messages near this date
RE: [C++-sig] Static, again... | RE: [C++-sig] Static, again...
Scott A. Smith wrote:

> David wrote:
> 
> >A static member function is just a regular function; you can add it at
> >module scope:
> >
> >BOOST_PYTHON_MODULE_INIT(numTest)
> >{
> >   def("getDims", &Num::getDims);
> >   ...
> >}
> >
> 
> Yep, this compiles just fine, but that is not the problem. 
> Unfortunately, I cannot call it from Python without errors.
> Here is what happens when I added the code to the hello example
> (Cygwin/GCC BPV2):
> 
> $ python
> Python 2.2.2 (#1, Nov 15 2002, 07:49:04)
> [GCC 2.95.3-5 (cygwin special)] on cygwin
> Type "help", "copyright", "credits" or "license" for more information.
> 
> >>>from hello import *
> >>>X = Num()
> >>>print X.dims()
> >>>
> 5
> 
> >>>print X.getDims()
> >>>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> TypeError: bad argument type for built-in operation
> 
> >>>print Num().getDims()
> >>>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> TypeError: bad argument type for built-in operation
> 
> >>>print Num.getDims()
> >>>
> Traceback (most recent call last):
>   File "<stdin>", line 1, in ?
> TypeError: unbound method Boost.Python.function object must
> be called with Num instance as first argument (got nothing instead)
> 

You are exposing a function, not a member function, so you should call 
it like this from python:

 > >> print getDims()

If that bothers you, you can:

1) Export it as "Num_getDims" instead of "getDims". It might be acceptable.


2) Create a static function on the python side, like this:

 > >> from hello import *
 > >> Num.getDims = staticmethod(getDims)
 > >> print Num.getDims()


3) Wait for David to implement the new facility to export static 
functions, which he said he would do as soon as he could, IIRC.

> Thanks, Scott
> 

Best Regards,
Nicodemus.




_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
Hugo van der Merwe
Scott A. Smith
David Abrahams
Scott A. Smith
Nicodemus
Scott A. Smith
Mike Rovner
David Abrahams
David Abrahams
Hugo van der Merwe
Hugo van der Merwe
David Abrahams
Hugo van der Merwe
David Abrahams

Privacy Policy | Email Opt-out | Feedback | Syndication
© ActiveState Software Inc. All rights reserved