Комментарии 9
Чем конечный вариант (очень странного) примера лучше изначального варианта?
+5
Тем что теперь стало меньше кода, выглядит (лично для меня) более читаемым и понятным.
Один аргумент вместо двух, шаг вперёд теперь совмещён с проверкой на конец контейнера.
По поводу странности: Я ориентировался на то как сделаны перечислители в Linq.
Один аргумент вместо двух, шаг вперёд теперь совмещён с проверкой на конец контейнера.
По поводу странности: Я ориентировался на то как сделаны перечислители в Linq.
-2
Во-первых, кода столько же.
Во-вторых, повышенная читабельность под сомнением: все плюсовики привыкли к STL-стилю и легче прочитают изначальный вариант.
В-третьих, уменьшение числа аргументов не только понизило сложность, но и уменьшило универсальность: теперь алгоритм нельзя применить к части контейнера. С тем же успехом вы могли просто поставить единственным аргументом ссылку на вектор.
Насчёт странности: я имел в виду не ваше решение, а поставленную изначально задачу. Вы не могли бы привести какой-нибудь более-менее жизненный пример задачи, решение которой вы упростили таким образом? Возможно, станет легче понять, что вы имели в виду, и увидеть преимущества вашего решения.
Во-вторых, повышенная читабельность под сомнением: все плюсовики привыкли к STL-стилю и легче прочитают изначальный вариант.
В-третьих, уменьшение числа аргументов не только понизило сложность, но и уменьшило универсальность: теперь алгоритм нельзя применить к части контейнера. С тем же успехом вы могли просто поставить единственным аргументом ссылку на вектор.
Насчёт странности: я имел в виду не ваше решение, а поставленную изначально задачу. Вы не могли бы привести какой-нибудь более-менее жизненный пример задачи, решение которой вы упростили таким образом? Возможно, станет легче понять, что вы имели в виду, и увидеть преимущества вашего решения.
+11
А почему вас не устраивает так:
std::vector<int> values { 0, 1, 2, 3, 4, 5 };
for (auto i : values)
std::cout << i;
+6
Зачем
template <typename...> typename Container
если можно просто typename Container
. Вам ведь по отдельности аргументы не нужны, а появляется искусственное ограничение что контейнер может быть только шаблоном.
В ещё можно просто воспользоваться range-v3.
+2
По-моему, проще сделать конечный автомат, который будет хранить в state обработчик, который нужно применять сейчас. Тогда у вас будут обработчики, которые ничего не знают про перечисление и перечислитель, который вызывает нужную функцию.
+1
Все мы, C++ программисты, несомненно любим STL.Те, кто использует Qt — уже не C++ программисты?
-7
Наверное я не понял постановку задачи — простой цикл for() по контейнеру почему не подходит?
#include <iostream>
#include <vector>
#include <string>
void do_anything(std::string &);
int main () {
std::vector<std::string> strings = {"first", "second", "third", "fourth"};
for (auto it : strings) {
do_anything(it);
}
}
void do_anything(std::string &str) {
std::cout << str << std::endl;
}
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Удобный C++ перечислитель