Информация об изменениях

Сообщение Re[4]: lambda являются first class citizens? от 06.05.2018 10:33

Изменено 06.05.2018 10:36 kov_serg

Re[4]: lambda являются first class citizens?
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, kov_serg, Вы писали:


_>>Если да то как массив например их 3 таких лямбд задать?


AG>А в чём проблема?

AG>
AG>int main(void) {
AG>    auto x = []{ std::cout <<"hi\n"; };
AG>    decltype(x) y[] = {x, x, x};
AG>    y[1]();
AG>    return 0;
AG>}
AG>

Проблема в том что для first class citizen такой проблемы не должно быть
auto x=[]{ std::cout<<"x\n"; };
auto y=[]{ std::cout<<"y\n"; };
auto z=[]{ std::cout<<"z\n"; };
typedef decltype(x) t;
void foo(t); foo(x); foo(y); foo(z);
t a[]={x,y,z};

В C++ стараются сделать костылями. Именно это печалит. Что указатели на члены класса что лямбды. А перегружаемые функции с лямбдами. А если вируальную функцию захочеться? В результате таких нововедений растёт только сложность и энтропия и вместо упрощения получаем новые проблемы.
Так что это не "first class citizen" это "crutch class citizen".
Re[4]: lambda являются first class citizens?
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, kov_serg, Вы писали:


_>>Если да то как массив например их 3 таких лямбд задать?


AG>А в чём проблема?

AG>
AG>int main(void) {
AG>    auto x = []{ std::cout <<"hi\n"; };
AG>    decltype(x) y[] = {x, x, x};
AG>    y[1]();
AG>    return 0;
AG>}
AG>

Проблема в том что для first class citizen такой проблемы не должно быть
auto x=[]{ std::cout<<"x\n"; };
auto y=[]{ std::cout<<"y\n"; };
auto z=[]{ std::cout<<"z\n"; };
typedef decltype(x) t;
void foo(t); foo(x); foo(y); foo(z);
t a[]={x,y,z};

В C++ стараются сделать костылями. Именно это печалит. Что указатели на члены класса что лямбды. А перегружаемые функции с лямбдами. А если вируальную функцию захочеться? В результате таких нововедений растёт только сложность и энтропия и вместо упрощения получаем новые проблемы.
Так что это не "first class citizen" это "crutch class outlander".