Любой способ связать константу с типом в Rust? - PullRequest
0 голосов
/ 01 июня 2019

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

trait My {
    const C: usize;
}

fn f<T>() -> [i32; T::C] where T: My {
    unimplemented!();
}

Но ржавчина не может справиться с этим

https://play.rust -lang.org/?version=stable&mode=debug&edition=2018&gist=a2d51315ba58f92d0e29bdac32115a62

Есть ли какой-либо другой способ получить константу из типа в обобщенной функции?

1 Ответ

2 голосов
/ 01 июня 2019

Вы можете использовать generic_array ящик - это не позволяет использовать массивы Rust фиксированного размера, но вы можете выразить длину массива как связанный тип

trait My {
  type C: ArrayLength<i32>;
}

А затем обратитесь к нему с привязкой черты

fn f<T>() -> GenericArray<i32, T::C> where T: My {
  ...
}

Затем вы также можете получить значение константы из типа с помощью to_usize .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...