В целом это оказалось хорошим трюком, потому что мы не возились вручную с сотнями файлов, вместо этого просто написали 1 файл со всеми нашими пользовательскими записями ShortString с неявными операторами классов. (Был промежуточный шаг, который автоматически заменял все типы ShortString на наши собственные и добавлял модуль StringTypes для использования, но это было безопасно.) Тысячи предупреждений, связанных с ShortString, исчезли.

бавились от короткой строки как часть преобразования из Delphi 7. Я хотел сделать его как можно более безболезненным, поэтому мы решили, что мы можем изменить ShortString на некоторую запись, которая действовала бы таким же образом. Вот как это объявлено (это еще не все, но это основная структура, которая обрисовывает в общих чертах проблему):

TShortStringRec = record 
private
  FStuff: array [0..49] of Char;
public
  class operator Implicit(AStuff: TShortStringRec): String;
  class operator Implicit(S1: String): TShortStringRec;
end;

Это хорошо работает для установки строк в записи. Но тогда есть такие функции, какformat которые принимают в качестве параметраconst array of const«S. Есть ли способ сделать приведение к тому, что мы хотели бы передать в константный массив?

function FunkyFunc : string;
var
  ssr : TShortStringRec;
begin
  ssr := 'Wall'; 
  result := format('Hello %s', [ssr]);  //<---error here
end;

Дает синтаксическую ошибку при компиляции, потому что ssr не является типом параметра, который вы можете использовать в одном из этих массивов.

Ответы на вопрос(3)

Ваш ответ на вопрос