Функции

Тот же набор правил применяется и к функциям: тип T становится обобщённым, когда предшествует .

При использовании обобщённых функций, иногда требуется явно указывать тип данных параметров. Это может быть необходимо в случае, если вызываемая функция возвращает обобщённый тип или у компилятора недостаточно информации для вывода необходимого типа данных.

Вызов функции с явно указанными типами данных параметров выглядит так: fun::().

struct A; // Конкретный тип `A`.

struct S(A); // Конкретный тип `S`.

struct SGen(T); // Обобщённый тип `SGen`.

// Все следующие функции становятся владельцем переменной, переданной в них.

// После передачи, она сразу выходит из области видимости и освобождается.

// Объявляем функцию `reg_fn`, которая принимает аргумент `_s` типа `S`.

// Здесь отсутствует ``, поэтому это не обобщённая функция.

fn reg_fn(_s: S) {}

// Объявляем функцию `gen_spec_t`, которая принимает аргумент `_s` типа `SGen`.

// В ней явно задан параметр типа `A`, но поскольку `A` не был указан

// как параметр обобщённого типа для `gen_spec_t`, то он не является обобщённым.

fn gen_spec_t(_s: SGen) {}

// Объявляем функцию `gen_spec_i32`, которая принимает аргумент `_s` типа `SGen`.

// В ней явно задан тип `i32`, который является определённым типом.

// Поскольку `i32` не является обобщённым типом, эта функция

// также не является обобщённой.

fn gen_spec_i32(_s: SGen) {}

// Объявляем функцию `generic`, которая принимает аргумент `_s` типа `SGen`.

// Поскольку `SGen` предшествует ``, эта функция

// является обобщённой над `T`.

fn generic(_s: SGen) {}

fn main() {

// Используем не обобщённые функции.

reg_fn(S(A)); // Конкретный тип.

gen_spec_t(SGen(A)); // Неявно определён тип параметра `A`.

gen_spec_i32(SGen(6)); // Неявно определён тип параметра `i32`.

// Явно определён тип параметра `char` в `generic()`.

generic::(SGen('a'));

// Неявно определён параметр типа `char` в `generic()`.

generic(SGen('c'));

}

הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Смотрите также:

Функции и структуры

Загрузка...