Эмулировать понимание списка в стиле Python в C ++, используя rangev3? - PullRequest
0 голосов
/ 27 мая 2018

Используя библиотеку rangev3, я могу сделать это:

  auto march = view::iota(1,32)
              | view::transform(
                [](int i){return date(1995, greg::Mar, i);
                });

, давая мне даты в марте 1995 года:

1995-Mar-01
...
1995-Mar-31

Есть ли способ сделать это в синтаксисееще ближе к питонам:

[date(1995, Mar, i) for i in range(32)] 

В частности, я чувствую, что начало с даты / функции помогает удобочитаемости кода.

1 Ответ

0 голосов
/ 27 мая 2018

Самое близкое, что вы получите, это использование variadics:

namespace detail {
  template <std::size_t ...Is>
  std::vector<date> generate(std::index_sequence<Is...>) {
    return {date(1995, greg::Mar, Is + 1)...}; // almost like Python
  }
}

std::vector<date> generate() {
  return detail::generate(std::make_index_sequence<32>());
}

Но теперь вы не используете диапазоны и вам нужно определить две отдельные функции.

...