powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / делегаты в языках программирования
25 сообщений из 129, страница 5 из 6
делегаты в языках программирования
    #39060115
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstРаз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
запостить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Author Manu Sánchez (Manu343726). Aug 2014

// Everything started from this:
// http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
// Now, play with C++14!

#include <utility>
#include <iostream>

auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };

auto map = [](auto... args) {
  return [=](auto f) { return tuple(f(args)...); };
};

auto cat_raw = [](auto... largs) {
  return [=](auto... rargs) { return tuple(largs..., rargs...); };
};

auto rcat = [](auto... largs) {
  return [=](auto rhs) { return rhs(cat_raw)(largs...); };
};

auto print_tuple = [](auto t) {
  return t(map)([](auto e) {
    std::cout << e << " ";
    return e;
  });
};

int main() {
  auto t = tuple(5u, 6, 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

  print_tuple(t);
}


В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060129
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВwstРаз одновременно зашла речь о смерти компилятора и высших порядках, все-таки вынужден
запостить.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
// Author Manu S&#225;nchez (Manu343726). Aug 2014

// Everything started from this:
// http://stackoverflow.com/questions/25338795/is-there-a-name-for-this-tuple-creation-idiom
// Now, play with C++14!

#include <utility>
#include <iostream>

auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };

auto map = [](auto... args) {
  return [=](auto f) { return tuple(f(args)...); };
};

auto cat_raw = [](auto... largs) {
  return [=](auto... rargs) { return tuple(largs..., rargs...); };
};

auto rcat = [](auto... largs) {
  return [=](auto rhs) { return rhs(cat_raw)(largs...); };
};

auto print_tuple = [](auto t) {
  return t(map)([](auto e) {
    std::cout << e << " ";
    return e;
  });
};

int main() {
  auto t = tuple(5u, 6, 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

  print_tuple(t);
}


В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060140
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsm
будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };


Это ответ на первый или на второй вопрос?
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060168
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В данном случае для "объекта произвольного класса" все упрется в строчку
Код: plaintext
1.
std::cout << e << " ";

Собственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060178
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst
Собственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
Соответственно произвольный кортеж в tuple мы не сможем передать? :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060189
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "произвольный кортеж" и откуда он возьмется? Хотелось бы увидеть пример кода.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060192
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВwstСобственно компилятор все это хозяйство разворачивает в цепочку вызовов << для cout.
Соответственно произвольный кортеж в tuple мы не сможем передать? :)напиши для своего пользовательского типа оператор вывода в поток - и передавай :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060212
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВdrsmбудет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };


Это ответ на первый или на второй вопрос?
на оба
http://ideone.com/F2cHt5
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060297
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstЧто такое "произвольный кортеж" и откуда он возьмется? Хотелось бы увидеть пример кода.
кортеж
std::tuple.
Призвольный я не подсуну, должен явно в коде прописать вызов tuple(....) и компилятор на этапе компиляции должен все это развернуть...
drsmЕвгенийВпропущено...

Это ответ на первый или на второй вопрос?
на оба
http://ideone.com/F2cHt5
С оператором вывода в поток понятно. Отсутствие такого вызовет ошибку компиляции?
В .NET например все объекты наследуются от одного и у всех есть метод ToString().
В С++ никто не обязывает класс иметь operator const char*().
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060335
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВ tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

ЕвгенийВПризвольный я не подсуну, должен явно в коде прописать вызов tuple(....) и компилятор на этапе компиляции должен все это развернуть...

Кто-то явно запутался в показаниях.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060393
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВС оператором вывода в поток понятно. Отсутствие такого вызовет ошибку компиляции?конечно, в этом и смысл. Зачем пытаться распечатать то, что распечатать нельзя?
ЕвгенийВВ С++ никто не обязывает класс иметь operator const char*().более того, рекомендуется его не иметь )))
а иметь оператор << если надо класс выводить в поток.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060407
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wst
Кто-то явно запутался в показаниях.
Я отвечаю сам себе.
Что бы было можно, язык должен поддерживать Параметрический полиморфизм высших порядков .
Его к сожалению нет даже в F#, но к моему удивлению есть в scala.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060447
drsm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsmЕвгенийВпропущено...

В tuple можно передать произвольный кортеж произвольных типов сформированный во время исполнения?
Что будет если auto t = tuple(5u, тут объект произвольного класса , 7l, 8.0)(rcat)(tuple(1u, 2, 3l, 4.0));

будет копироваться видимо
тк
Код: plaintext
1.
auto tuple = [](auto... args) { return [=](auto f) { return f(args...); }; };



я намекал на то, что захват аргументов в возвращаемой лямбде происходит по значению [=], те класс уже не произвольный
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060476
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drsmя намекал на то, что захват аргументов в возвращаемой лямбде происходит по значению [=], те класс уже не произвольный
Да уж плюсы однако, даже замыкания надо описывать)))
Бедные разработчики компиляторов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060504
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВБедные разработчики компиляторов.
им то глубоко фиолетово
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060514
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилим то глубоко фиолетово
Почему? Ведь много больше работы.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060541
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИзопропилим то глубоко фиолетово
Почему? Ведь много больше работы.
это кажется.

лямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060568
wst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разработчики стандарта с++ снисходят к страданиям разработчиков компиляторов только если те годами отказываются пилить какую-то фичу (export template ftw).
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060622
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wstРазработчики стандарта с++ снисходят к страданиям разработчиков компиляторов только если те годами отказываются пилить какую-то фичу (export template ftw).
Толи дело Хейсберг! Сам придумал, сам запилил :)
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060659
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропиллямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает

Все языки высокого уровня -- синтаксический сахар. ПИШИТЕ НА АсСЕМБЛЕРАХ !
(но почему-то никто не пишет).
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060661
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Испортят ведь. Расколят сообщество С++ еще на несколько лагерей.
Будет консервативное крыло. И приверженцы кортежей и прочих adhoc
и параметрических полиморфизмов.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060680
S.Vatagin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonИспортят ведь. Расколят сообщество С++ еще на несколько лагерей.
Будет консервативное крыло. И приверженцы кортежей и прочих adhoc
и параметрических полиморфизмов.
Я только не понимаю. Разве вопрос был именно про C++. Я, например, вообще приводил примеры на javascript.
Но можно на Scala, Haskell, Ruby, Python, Erlang etc
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060687
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини. Топик живёт своей жизнью. Разумеется мой камент относится исходникам wst.
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060716
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivИзопропиллямбда в с++ - в значительной степени синтаксический сахар
а то что способ захвата (по ссылке или по значению) нужно явно описывать - задачу разработчику компилятора упрощает

Все языки высокого уровня -- синтаксический сахар. ПИШИТЕ НА АсСЕМБЛЕРАХ !
(но почему-то никто не пишет).
я к тому, что реализация лямбд в с++ не требует от создателей компиляторов особых усилий
...
Рейтинг: 0 / 0
делегаты в языках программирования
    #39060793
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо, сегодня прочитал, в целом то о чём я и думал. Читаю сейчас ещё одну статью , думаю некоторым будет интересно
...
Рейтинг: 0 / 0
25 сообщений из 129, страница 5 из 6
Форумы / Программирование [игнор отключен] [закрыт для гостей] / делегаты в языках программирования
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]