#c_sharp #net #tree
как я могу перегрузить оператор "+", чтобы можно было получить сумму двух узлов двоичного дерева поиска, учитывая то, что тип я у них сделал произвольным, но если будет тип Int у узлов, то тогда можно сложить, а если другой тип, то нельзя. Вот код: class Node{ internal T value; public static Node operator +(Node A, Node B) { return new Node (A.value + B.value); } public int Balance { get { if (Left == null && Right == null) return 0; else if (Left == null && Right != null) return 0 - Right.Height; else if (Left != null && Right == null) return Left.Height; return (Left.Height - Right.Height); } private set { } } public int Height { get { if (Left == null && Right != null) return 1 + Right.Height; else if (Left != null && Right == null) return 1 + Left.Height; else if (Left != null && Right != null) { if (Left.Height >= Right.Height) return Left.Height + 1; else return Right.Height + 1; } else return 0; } private set { } } Я хочу сделать так, чтобы эти оператором можно было воспользоваться только если тип значения узла Int не использовать для этого отдельный новый класс IntNode : Node , а сделать это прямо в Node Мне выводит такую ошибку: Тип одного из параметров бинарного оператора должен быть вмещающим.
Ответы
Ответ 1
сделать так, чтобы эти оператором можно было воспользоваться только если тип значения узла Int Невозможно. Это невозможно даже в C++ с его текстовыми шаблонами формата "найти-заменить" (оператор будет доступен, но при компиляции вывалится 10КБ текста ошибок в потрохах инклюдов). Если класс имеет разные члены в зависимости от параметров, то это не один класс. Вряд ли от этого принципа отступятся. не использовать для этого отдельный новый класс IntNode : Node, а сделать это прямо в Node Много вариантов: Построить Expression с оператором, скомпилировать. Сгенерировать IL в рантайме. Воспользоваться отражениями. Воспользоваться dynamic, который воспользуется отражениями. Чистого варианта нет. Возможно, когда-нибудь будет, но я бы не сильно надеялся, что это случится скоро: у задачи Exploration: Shapes and Extensions нет ни статуса, ни майлстона (даже "X.0").
Комментариев нет:
Отправить комментарий