Boost logo

Boost :

Subject: Re: [boost] [lclcontext] Any interest in Pythonesque "with-as" statement in C++.
From: Sam Kellett (samkellett_at_[hidden])
Date: 2015-08-17 04:59:08

> I think Python's concept of Context and Context Managers useful and I've
> adapted, to the best of my abilities, a similar concept in C++. For those
> not familiar with this concept, I'll quote a brief snippet from the
> documentation:

> "Simply stated, this library enables the use of the Pythonesque
> with-statement construct in C++. More
> broadly, this library seeks to formalize a generalized version of a subset
> of the RAII (Resource
> Acquisition is Initialization) idiom that, for the lack of preexisting
> terms, I shall refer here to as the
> STEP (Scope Triggered Event Processing) idiom. The STEP idiom is the
> commonly occurring use case
> where for a given block of code some user specified action(s) must execute
> on entry and on exit, and
> the failure to do so will result in some deterministic behavior."
> You can find the library here:
> Documentation is here:
> (In the same repository I've also redid Boost's local_function, but that
> the subject of another posting.)
> If there is enough interest from the community for such a library then I
> will go ahead and "Boostify" it.

i'm sure you already know this but C++14's initialized lambda captures
basically are python's with-as (albeit with C++'s normal syntax tax).

struct foo {
  foo() { std::cout << "foo()" << std::endl;
  ~foo() { std::cout << "~foo()" << std::endl;

auto make_foo() -> foo {
  return {};

auto main() -> int {
  std::cout << "before" << std::endl;
  [f = make_foo()]() {
    std::cout << "during" << std::endl;
  std::cout << "after" << std::endl;

With perfect forwarding we could even achieve a nicer syntax without any

with(make_foo(), [](auto f) {
  // ...

Boost list run by bdawes at, gregod at, cpdaniel at, john at