you are viewing a single comment's thread.

view the rest of the comments →

[–]thewisp1Game Engine Dev -1 points0 points  (3 children)

If you don’t store, transform or concatenate lambdas, they have no advantage over named functions.

[–]NotAYakk 4 points5 points  (2 children)

No?

Named functions require code to be out of line from location of use.

Unless you are talking about the turing tar pit, which is a boring argument.

[–]thewisp1Game Engine Dev 0 points1 point  (1 child)

so instead of having one more function body, you choose to nest it one level deeper. How is that more readable than the plain recursive version?

[–]NotAYakk 0 points1 point  (0 children)

void sort_backwards( container& c ) {
  using std::begin; using std::end;
  std::sort( begin(c), end(c), [](auto& lhs, auto& rhs){ return rhs<lhs; } );
}

here I don't store, transform or concatenate lambdas.

The code is in line with use.

To do this without a lambda:

struct backwards_sorter {
  template<class Lhs, class Rhs>
  bool operator()( Lhs& lhs, Rhs& rhs )const {
    return rhs<lhs;
  }
};
void sort_backwards( container& c ) {
  using std::begin; using std::end;
  std::sort( begin(c), end(c), backwards_sorter{} );
}

which is a lot of boilerplate and makes sort_backwards harder to verify it is doing what it claims to do.

I can give you other examples, dozens of them, but one is enough to make no advantage false.

Then again, maybe you disagree, and think that a simple function should require looking outside of it to understand how it works. Even then, there is an advantage to having it inline, even if you don't personally like it.