шаблоны проектирования — генератор последовательности C ++ со значением init по вложению функции

У меня есть вопрос: допустим ли приведенный ниже фрагмент кода и является ли он оптимальным для функции генератора последовательности в C ++ 14?

auto sequenceGen = [](int&& init) {
int counter = init;
return [counter=std::move(counter)]() mutable { return ++counter; };
};
auto getSeq1 = sequenceGen(100);
cout << getSeq1()<< endl;
cout << getSeq1()<< endl;

Если нет, то как это должно быть реализовано?

0

Решение

Примитивные типы, такие как int не извлекать выгоду из переместить семантику, ходы точно такие же, как копии. Ваш код может быть упрощен до:

auto sequenceGen = [](int init) {
return [init]() mutable { return ++init; };
};

auto getSeq1 = sequenceGen(100);
cout << getSeq1() << '\n';
cout << getSeq1() << '\n';

Также избегайте использования std::endl если вы не хотите принудительно очищать буфер, так как он неэффективен по сравнению с '\n',

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]