[C++-sig] boost python & context manager/with statement

Jim Bosch talljimbo at gmail.com
Sun Feb 12 19:43:31 CET 2012


On 02/12/2012 01:25 PM, Avi Bahra wrote:
> Does boost python support context management using the with
> statement?  In my case I need to manage __enter__/__exit__ on
> the c++ side. Could not find any examples for this in the
> documentation.
>

Do you mean that you want to create an object that *has* __enter__ and 
__exit__ methods in C++, or that you want to write something like a 
"with" statement in C++?

If it's the former, you can do that pretty easily - just call your 
methods "__enter__" and "__exit__" and give them the right signatures, 
and Python will use them quite happily.

If it's the latter, I'm afraid there's no syntactic sugar for it.  It's 
probably easiest to fake it by calling __enter__ and __exit__ and 
wrapping it all in a C++ try/catch block (if you raise a Python 
exception, it gets thrown in C++ as boost::python::error_already_set). 
But C++ itself doesn't really have a context management syntax, so there 
isn't really a good way to simulate the Python one.

HTH

Jim


More information about the Cplusplus-sig mailing list