Предположим, у меня есть запись TQuaternion и рекордер. У кватернионов есть несколько методов с параметрами ТВП. С другой стороны, TVector поддерживает некоторые операции с параметрами TQuaternion.Перекрестная ссылка между delphi records
Зная, что Delphi (Win32) не разрешает объявления о прямой записи, как я могу решить эту проблему?
Использование классов на самом деле не является вариантом здесь, потому что я действительно хочу использовать перегрузку оператора для этого редкого случая, где это на самом деле имеет смысл.
На данный момент я просто переместил эти конкретные методы из записей и в отдельные функции, добрый старомодный способ. Лучшие предложения приветствуются.
Перегрузка оператора * никогда * имеет смысл, имхо. YMMV. В этом случае у вас есть определенная проблема, которая легко решается с помощью классов - вы теряете перегрузку оператора, но получаете то, что вам нужно, и единственной «потерей» является возможность обфускации вызова метода с очевидным (но не фактическим) оператором - теми обфусканные вызовы просто должны быть более очевидными (читайте: понятный, понятный, понятный) в коде. В качестве альтернативы используйте указатели для записей ... тогда вам также нужно управлять памятью для записей, на которые указывают эти указатели, и тогда вам действительно просто лучше использовать классы. – Deltics
Да, я знаю, что я просил немного тепла, когда упоминал перегрузку оператора. Дело в том, что проблема, которую я описываю здесь, не является единственной проблемой, с которой приходится иметь дело с моим кодом.Перегрузка операторов решает гораздо большую проблему в коде: сохранение больших объемов математических операций легче читать, заставляя их больше походить на их естественную (на бумажной) нотации. Это полная противоположность запутыванию. Но опять же, я очень осведомлен, что это, как правило, подвергает жарким спорам среди разработчиков. –
В качестве опоры: Я нахожусь на вашей стороне забора (обычно мы делаем все с помощью объектов + интерфейс), это немного эксперимент, чтобы улучшить переносимость некоторых деталей с интенсивным математическим учетом. Опыт немного отличается от оптимизации «обычного» (что бы это ни значило) кода для удобочитаемости. –