Boost logo

Boost Users :

From: David Abrahams (dave_at_[hidden])
Date: 2004-07-04 11:55:56


Peter Piehler <ppiehler_at_[hidden]> writes:

> Hello,
>
> I use call<void>(pyFunc,arg1,..) to call a python
> function with standard double, int etc.

Please bring Boost.Python questions to the C++-sig:
http://www.boost.org/more/mailing_lists/cplussig

> What must I do to call a function with a c++ object as
> argument?

A standard double is a c++ object. I presume you mean an instance of
a C++ class. Just pass it to call and make sure its class has been
wrapped.

> psydocode:
>
> class MyAnimal
> {
> /*...*/
> std::string __strName;
> public:
> MyAnimal() : __strName("Tux") {}
> /*...*/
> std::string getName()
> { return __strName;}
> void setName(const std::string &strName)
> { __strName = strName; }
> };
>
> int main()
> {
> /*...*/
> MyAnimal* pTux = new Animal;
> /*do something with pTux*/
>
> /*use a python function with pTux*/
> call<void>(pyFunc1, ?pTux? );

    You can pass pTux or *pTux; that will cuase *pTux to be copied
    into a Python object. You can pass ptr(pTux) or ref(*pTux); that
    will pass a Python object that only holds *pTux by reference (no
    lifetime management)

> /*change attributes pTux in pyFunc2*/
> dog = call<MyAnimal>(pyFunc2, ?pTux?);
>
> /*if it possible to call by reference?*/
> call<void>(pyFunc3, ?pTux?);
> pTux->getName();// return Cat

-- 
Dave Abrahams
Boost Consulting
http://www.boost-consulting.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net