C ++ лямбда и встроенный fizzbuzz

Хои, я видел разговор на C ++, где кто-то сделал лямбда-реализацию fizzbuzz.

Это не так! Даже близко к этому!
Мой вопрос, почему я не могу использовать ostream&

auto fizz = [](int& x, std::ostream& os) { x % 3 == 0 ? os << "fizz" : 0; };
auto buzz = [](int& x, std::ostream& os) { x % 5 == 0 ? os << "buzz" : 0; };for (int i = 0; i != 100; ++i)
{
fizz(i, std::cout);
buzz(i, std::cout);
}

И мое сообщение об ошибке:

        E1776   function "std::basic_ostream<_Elem, _Traits>::basic_ostream(const std::basic_ostream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 83 of "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\include\ostream") cannot be referenced -- it is a deleted function    56

3

Решение

Ваша проблема вполне понятна. поскольку std::ostream а также int не относятся к одному типу, при условии, что типы, не совпадающие с троичным оператором, создают ошибку. Чтобы решить эту проблему, вы, вероятно, хотите вообще избежать предложения else, чтобы ваши функции выглядели так:

auto fizz = [](int& x, std::ostream& os) { if (x % 3 == 0) os << "fizz"; };
auto buzz = [](int& x, std::ostream& os) { if (x % 5 == 0) os << "buzz"; };

4

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

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

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