Re: [C++-sig] wrap global variable (def not work)
by Nicodemus other posts by this author
Jun 4 2003 3:54PM messages near this date
[C++-sig] wrap global variable (def not work)
|
[C++-sig] boost::python and exceptions, seg fault
Zhang Le wrote:
> Hello,
> I want to wrap a single int variable to python model but failed:
> the code is:
> int verbose = 1;
> BOOST_PYTHON_MODULE(foo)
> {
> def("verbose", &verbose);
> }
>
> <snip error message>
>
> It seems def can only be used on class members. Any tips?
>
Try this:
int verbose = 1;
int get_verbose() { return verbose; }
BOOST_PYTHON_MODULE(foo)
{
scope().attr("verbose") = verbose;
def("get_verbose", &get_verbose);
}
But there's one problem:
> >> import foo
> >> foo.verbose
1
> >> foo.verbose = 2
> >> foo.verbose
2
> >> foo.get_verbose()
1
Ie, changes in a global variable won't be seen in C++, so this technique works only for cons
tants. If you *really* need to be able to change the global variable from Python, you will h
ave to create accessor functions and use these. That's not Boost.Python fault really, is jus
t that in Python there's no way to know when a module-variable is *rebound* (note, not *chan
ged*).
HTH,
Nicodemus.
_______________________________________________
C++-sig mailing list
C++-sig@[...].org
http://mail.python.org/mailman/listinfo/c++-sig
Thread:
Zhang Le
Nicodemus
|