получение массива состояний, размер которого равен количеству пинов.
Но такой код не компилируется.
trait Pins {
const COUNT: usize;
fn get_state(&self) -> [bool; Self::COUNT];
}
struct MyPins;
impl Pins for MyPins {
const COUNT: usize = 3;
fn get_state(&self) -> [bool; Self::COUNT] {
[false; Self::COUNT]
}
}
Требует ограничения: help: try adding a where bound using this expression: where [(); Self::COUNT]:
Но зачем? Такое ограничение требует если над размером массива производится суммирование или подобные операции
Self::COUNT это константа а не тип, тут или const generic или добавить к константе ассоциированные тип. но const generics будет проще и чище
Это ассоциативная константа, которая объявлена в трейте, в котором объялена ещё функция с возвратом массива. Добавил generic_const_exprs и в тех местах, где вызываю функцию Pins::get_state, пишу ограничение: [(); <H as Pins>::COUNT]:,
Так. Работать. Не. Будет. Юзай конст генерики trait Pins<COUNT: usize> { fn get_state(&self) -> [bool; COUNT]; }
Размер масива должен зависить от структуры для которой реализован трейт, а не от размера масива в который записывает вызывающая сторона
тогда тебе надо числа вытяшивать в типы, кодогенерация, макросы, страдания
А есть какая-то фундаментальная проблема с этим? Просто было бы логично, если бы можно было объявлять константы как дженериком, так и ассоциированной константой - то же, что и с типами
насколько я помню это пока не допили
Оно работает, просто нет нормальных bounds для констант.
Обсуждают сегодня