Как работает пожизненная обработка для объектов-черт Fn с универсальными типами?

Если другие решения в этом потоке не помогли обновить графические драйверы. Я не получал ошибку, как описано выше, но я не мог щелкнуть параметры в окне создания нового проекта.

У меня была установлена ​​удаленная и переустановленная профессиональная, премиум-модель и эксплойт VS 2013 несколько раз, но в

Я запускаю Windows 8.1 (с новым обновлением) и Radeon HD7850.

Я запускаю Windows 8.1 (с новым обновлением).
0
задан Shepmaster 16 January 2019 в 18:59
поделиться

1 ответ

На самом деле это работает так же, как и другие.

struct T<'a> {
    f: &'a Fn(&'a i32),
}

Это определение говорит, что функция f будет жить в 'a, и ее параметр также должен жить 'a.

Рассмотрим время жизни fn main() как 'm, а время жизни внутренней области как 'i. Вы создаете свою структуру в main, поэтому ее время жизни будет 'm, она будет жить в main, если вы не перейдете в другую область.

  1. В вашем первом примере аргумент, который вы передаете в t.f, создан в 'i. Согласно определению; аргумент и функция должны жить в одной и той же жизни. Но 'm больше, чем 'i. Так что это не приемлемо.
  2. В вашем втором примере все то же самое, но ваша структура фактически не переживает 'i. Это можно считать временем жизни f равным его аргументу. Так что это обеспечивает определение.
  3. Третий пример аналогичен 1.

Если вы измените определение, как показано ниже, удалив ограничение из параметра. Таким образом, компилятор может определить подходящее время жизни аргумента, оно может быть больше, равно или меньше времени жизни.

//this means your f and it's argument's life time can be different
struct T<'a> {
    f: &'a Fn(&i32),
}

Все ваши примеры будут действительны.

Здесь вы можете найти рабочие примеры в Playground

0
ответ дан Ömer Erden 16 January 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: