Как получить тип переменной, чтобы я мог вызвать функцию TurboFish? - PullRequest
0 голосов
/ 04 ноября 2019

Иногда у меня есть переменная, и я хочу вызвать функцию 'turbofish' с типом переменной. Например:

fn main() {
    let arr = [0u8; 4];
    println!("size_of arr: {}", std::mem::size_of::< TYPE_OF(arr) >());
}

Конечно, TYPE_OF() не существует. Поэтому я вынужден вручную закодировать тип:

println!("size_of arr: {}", std::mem::size_of::< [u8;4] >());

Было бы неплохо, если бы я мог получить тип переменной (во время компиляции, а не во время выполнения), поэтому я не сталМне нужно жестко закодировать тип.

1 Ответ

3 голосов
/ 04 ноября 2019

Для вашего конкретного примера в std уже есть функция для получения размера типа на основе его значения;std::mem::size_of_val:

println!("size_of arr: {}", std::mem::size_of_val(&arr));

В общем, если вы хотите связать переменную типа с типом, вам, вероятно, нужно сделать это в теле функции. Например, если size_of_val не существует, вы можете сделать:

fn main() {
    fn size_of_val<T>(_: &T) -> usize {
        std::mem::size_of::<T>()
    }
    let arr = [0u8; 4];
    println!("size_of arr: {}", size_of_val(&arr));
}
...