LINUX.ORG.RU

История изменений

Исправление Siborgium, (текущая версия) :

Э?

Выражусь иначе, пусть foo вызывает конструктор T, а не переданное ей замыкание.

Никаких vtable там нет. vtable появляется только в trait-objects (dyn Trait).

Семантически там именно vtable. На сишке я могу реализовать все то же самое, разве копипасты потребуется чуть больше.

Тип у type_is_not_erased будет u32. Никуда он не делся.

Я не о том. Вообще говоря, тип никуда не делся потому, что вы написали, что функция вернет тот же тип, что и получит на вход. О затирании типов внутри функции это не говорит ничего.

Раз тип никуда не девается, вы, наверное, можете мне вывести его куда-то? Напишите мне аналог std::is_same. Чтобы если T = u32, то функция возвращала val + 1, иначе val. Или, раз тип никуда не девается, то вы для произвольного T можете вызвать T::new(), или, по крайней мере, узнать, есть ли такая статическая функция у этого T?

Паники - это нарушения контрактов не описанных в сигнатуре.

Нет, паники – это банальные исключения, которые появляются тогда, когда в Расте что-то не получается реализовать нормально.

Исправление Siborgium, :

Э?

Выражусь иначе, пусть foo вызывает конструктор T, а не переданное ей замыкание.

Никаких vtable там нет. vtable появляется только в trait-objects (dyn Trait).

Семантически там именно vtable. На сишке я могу реализовать все то же самое, разве копипасты потребуется чуть больше.

Тип у type_is_not_erased будет u32. Никуда он не делся.

Я не о том. Вообще говоря, тип никуда не делся потому, что вы написали, что функция вернет тот же тип, что и получит на вход.

Раз тип никуда не девается, вы, наверное, можете мне вывести его куда-то? Напишите мне аналог std::is_same. Чтобы если T = u32, то функция возвращала val + 1, иначе val. Или, раз тип никуда не девается, то вы для произвольного T можете вызвать T::new(), или, по крайней мере, узнать, есть ли такая статическая функция у этого T?

Паники - это нарушения контрактов не описанных в сигнатуре.

Нет, паники – это банальные исключения, которые появляются тогда, когда в Расте что-то не получается реализовать нормально.

Исходная версия Siborgium, :

Э?

Выражусь иначе, пусть foo вызывает конструктор T, а не переданное ей замыкание.

Никаких vtable там нет. vtable появляется только в trait-objects (dyn Trait).

Семантически там именно vtable. На сишке я могу реализовать все то же самое, разве копипасты потребуется чуть больше.

Тип у type_is_not_erased будет u32. Никуда он не делся.

Я не о том. Вообще говоря, тип никуда не делся потому, что раст может однозначно вывести, что тут будет u32, но это не так важно.

Раз тип никуда не девается, вы, наверное, можете мне вывести его куда-то? Напишите мне аналог std::is_same. Чтобы если T = u32, то функция возвращала val + 1, иначе val. Или, раз тип никуда не девается, то вы для произвольного T можете вызвать T::new(), или, по крайней мере, узнать, есть ли такая статическая функция у этого T?

Паники - это нарушения контрактов не описанных в сигнатуре.

Нет, паники – это банальные исключения, которые появляются тогда, когда в Расте что-то не получается реализовать нормально.