Причём поистине в С++-way
Да уж, этого у него не отнять
время существования переменной на которую идёт ссылка нуждается в прямых руках
Ну, необходимость прямых рук — это C++-way, унаследованный от Цэ. У ++ требования к радиусу прямизны снижены, но таки да, не до нуля. Впрочем, ну а как вы себе представляете этот контроль в случае простых делегаторов?
М-да, дальше у вас идут глубины ++, до которых я не доныривал. Пытаюсь следить за ходом мысли, но не уверен, что получается. Вот начиная с этого места:
Одно из последствий этого подхода - все С++-лямбды являются объектами РАЗНЫХ классов, даже если они абсолютно идиентичны или совпадают по сигнатурам. Поэтому это еще не делегат
Почему все лямбды разных классов? Точнее говоря, какой из этого проистекает проблем? ++ — полностью типизированный язык; следовательно, аргумент-делегат имеет некоторый фиксированный тип, пусть даже этот тип есть signature {operator ();}. Что именно
копировать и вызывать делегаты между собой ориентируясь только на сигнатуру метода, без фиксации на том что там за класс и объект внутри
вы собрались тут делать? В общем-то, единственное, что можно делать с делегатом, кроме как вызвать, ну ещё хранить, организовывать в списки и т.п., что, насколько могу судить, легко делается описанным вами механизмом?
В gnu-std реализация std::function
Вот тут я вас окончательно покидаю ввиду слабого знакомства с предметом. Замечу только вот тут:
Таким образом то что в грёбанном Дельфи было внутри структурой из двух указателей
(Хриплым шёпотом: не обзывайте Паскаль! Модераторы его трогательно любят. Я уже получил предупреждение за цитату из, по-моему, Ершова) Паскаль не стоит, имхо, приводить в пример. Это нечто гораздо более простое, чем ++. Возьмите хоть механизм передачи параметров. Да, он проще, в ++ передача (если не использовать ссылки) сопряжена с вызовом конструктора копирования, так что да, делегаты в Паскале попроще.