это как делается вывод дженерик аргументов 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);
Проблема состоит в том, что вводя миксин для ноды которая может из базового класса получить список соседей я не могу сказать что соседи будут того же типа что и микшеная нода.
Я в сообщение не вчитывался, но отвечу на первый вопрос. - дерево - это и есть граф, даже точка - это граф. - я бы не рекомендовал подобным заниматься, потому что по моему опыту это может сильно тормозить ТС и дропать вывод типов случайно / намеренно через неск десятков связей - почему именно на классах хочется? С this пару хаков можно словить , конечно, но и проблем столько же. Тайпалиасы и поудобнее и попроще кмк
привет) Суть в том чтобы сделать 1 раз граф(я уже сделал). И потом применять к нему алгоритмы лайаутов вроде Reingold-Tilford просто заменяя Node на ThreeNode(Node).
Обсуждают сегодня