Range-based if (по анаглогии с range-based for)

Nate Reinar Windwood
Nate Reinar Windwood
if (token_expression : range_expression)
	conditional_statement

// Translates into:

{
	auto && __range = range_expression;
	auto && __token = token_expression;
	auto __begin = std::begin(__range);
	auto __end = std::end(__range);

	if (std::find(__begin, __end, __token) != __end)
		conditional_statement
}
-8
рейтинг
6 комментариев
Nate Reinar Windwood

*по аналогии

Nate Reinar Windwood
Nate Reinar Windwood

Хоть кто-нибудь из поставивших минус аргументировал бы, что ли :-/

Nate Reinar Windwood
Andrey

Nate Reinar Windwood, я не ставил минусов, но вот моя версия, почему в том виде, что Вы предлагаете это ужасная идея (и, кстати, в python'е это резализовано по-нормальному).

Для многих структур данных (к примеру, std::[unordered_]{set,map}) реализация contains через std::find -- это совершенно точно не то, чего хотелось бы.

 

Andrey
Обновлено 
Nate Reinar Windwood

Andrey, ну, значит, нужна функция std::contains, которая будет по-разному перегружена для разных структур, и в которую будет разворачиваться сабж.

Nate Reinar Windwood
yndx-antoshkka

Ещё не успел поставить минус... Но аргументация следующая:

Добавлять малоизвестный "синтаксический сахар" в язык - как правило очень плохая идея. Это ведёт к меньшей читаемости кода и риску скатиться в perl. Если собрать весь синтаксический сахар, что предлагали за 5 лет, то получится вот такой C++ код:

while (foo ~~ { @... }) {
  return {} unless foo != bar;
  foo += $&;
} else {
  static decltype(return) var;
  var += @ + ...;
  ++ g{hello}{word}[1:var:max];
  if ("hello":var)
    {};
  var;
}
{} 

Что тут происходит - не разобрать.

yndx-antoshkka
Александр Коновалов

Ещё один минус данного решения:

Предполагается, что данный код упростит поиск в контейнерах элемента. Для std::map и std::unordered_map элементом является std::pair. Т.е. в рамках данного синтаксиса получается:

if (std::make_pair("key", "value") : my_map)
    // ...

Это выглядит довольно странным и бесполезным.

Александр Коновалов
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения