Таким образом, C # использует объекты, выделенные в куче, и перенаправление через интерфейсы, как если бы оно было бесплатным.
Если вы хотите эмулировать это, вы должны сделать то же самое.Если вам также нужна семантика значений, вам нужно написать оболочки, которые содержат умные указатели и ведут себя как значения.
Другой подход состоит в том, чтобы не вводить стирание;вместо этого объект linq является уникальным типом для каждой цепочки модификаторов.Здесь linq
- это функция, не являющаяся типом, и вы сохраняете возвращаемые значения в auto
переменных.
Эти два подхода могут работать вместе, как лямбда (без вызова типа ersaure) и функция std (тип значения, которыйможет выделять кучу и стирать типы при конструировании, чтобы забыть все, кроме вызова интерфейса вызываемого объекта).
Чтобы получить дальнейшие сведения, узнайте об удалении типов (включая способ написания функции std), регулярных типах в C ++ и, возможно, изучитеRangesv3 - библиотека, поддерживающая потоковые выражения в стиле linq.