169 похожих чатов

#Question #mixins Как затипизировать дерево/граф на миксинах? 1) Первое что не понятно

это как делается вывод дженерик аргументов Base класса:
GraphData<
NodeKey,
EdgeKey,
Attributes,
IMyNodeData,
EdgeData<NodeKey, EdgeKey, Attributes>
>
И чтобы получить ссылку на эти аргументы мне нужно их явно пробросить:
const MyGraph = WithGraphReader<
NodeKey,
EdgeKey,
Attributes,
IMyNodeData,
EdgeData<NodeKey, EdgeKey, Attributes>,
typeof GraphData
>(GraphData);
Но это не работает, потому что typeof GraphData использовать нельзя(это сбрасывает generic аргументы GraphData в дефолты, независимо от того как вызван MyGraph).

2) Второе это то, что IMyNodeData это тип который должен задать типы всей коллекции нод в графе. Я использую интерфейсы т.к. нельзя ссылаться на миксины как на дженерик тип(это невозможно[длинный список ишью]).
const MyNodeData = WithNodeReader<
NodeKey,
EdgeKey,
Attributes,
NodeData<NodeKey, EdgeKey, Attributes>,
EdgeData<NodeKey, EdgeKey, Attributes>,
typeof NodeData
>(NodeData, myGraph);
Проблема состоит в том, что вводя миксин для ноды которая может из базового класса получить список соседей я не могу сказать что соседи будут того же типа что и микшеная нода.

2 ответов

21 просмотр

Я в сообщение не вчитывался, но отвечу на первый вопрос. - дерево - это и есть граф, даже точка - это граф. - я бы не рекомендовал подобным заниматься, потому что по моему опыту это может сильно тормозить ТС и дропать вывод типов случайно / намеренно через неск десятков связей - почему именно на классах хочется? С this пару хаков можно словить , конечно, но и проблем столько же. Тайпалиасы и поудобнее и попроще кмк

Nikita-Fedorov Автор вопроса

привет) Суть в том чтобы сделать 1 раз граф(я уже сделал). И потом применять к нему алгоритмы лайаутов вроде Reingold-Tilford просто заменяя Node на ThreeNode(Node).

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта