Хочу сделать трейт для разного количество пинов, и функцию для

получение массива состояний, размер которого равен количеству пинов.

Но такой код не компилируется.
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]:
Но зачем? Такое ограничение требует если над размером массива производится суммирование или подобные операции

8 ответов

23 просмотра

Self::COUNT это константа а не тип, тут или const generic или добавить к константе ассоциированные тип. но const generics будет проще и чище

Алексей-Прищепочка Автор вопроса
Vitaly
Self::COUNT это константа а не тип, тут или const ...

Это ассоциативная константа, которая объявлена в трейте, в котором объялена ещё функция с возвратом массива. Добавил generic_const_exprs и в тех местах, где вызываю функцию Pins::get_state, пишу ограничение: [(); <H as Pins>::COUNT]:,

Так. Работать. Не. Будет. Юзай конст генерики trait Pins<COUNT: usize> { fn get_state(&self) -> [bool; COUNT]; }

Алексей-Прищепочка Автор вопроса

Размер масива должен зависить от структуры для которой реализован трейт, а не от размера масива в который записывает вызывающая сторона

Алексей Прищепочка
Размер масива должен зависить от структуры для кот...

тогда тебе надо числа вытяшивать в типы, кодогенерация, макросы, страдания

Andrey Zgarbul
Так. Работать. Не. Будет. Юзай конст генерики tra...

А есть какая-то фундаментальная проблема с этим? Просто было бы логично, если бы можно было объявлять константы как дженериком, так и ассоциированной константой - то же, что и с типами

насколько я помню это пока не допили

Алексей-Прищепочка Автор вопроса
Boris Vinogradov
насколько я помню это пока не допили

Оно работает, просто нет нормальных bounds для констант.

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

Обсуждают сегодня

Я не понимаю, это троллинг или что? Швабрика поддерживают, который буквально пишет на ассемблере взаимодействия с винапи. Я это ещё написал загрузчик и хоть что-то изучаю в о...
Shadow Akira
6
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Всем привет. Хотел бы написать для себя свою ос. Причины: 1) нужен опыт в чем-то 2) будет меньше весить 3) свое, но там будут свои задумки Я понимаю что нужно писать для всег...
Shadow Akira
18
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
Инструкция вроде от 1 до 5 тиков ввполняется? Давайте все в ассемблер чат тему перенесём. Там будет больше людей которые связаны с этой темой. Прошу пожалуйста.
Shadow Akira
3
сколько это сотен тысяч инструкций?
Boris Vinogradov
4
5? да там все 10
Boris Vinogradov
12
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
что такое erg?
Maksim Lapshin
2
Карта сайта