Ада работает лучше всего, когда вы можете использовать массивы и строки идеального размера.Это прекрасно работает для 99% использования строк, но вызывает проблемы в любое время, когда вам нужно постепенно построить строку из чего-то другого.
Учитывая это, я бы очень хотел знать почему васнужна эта объединенная строка.
Если вам это действительно нужно, есть два хороших способа сделать это.Во-первых, использовать «неограниченные» (динамически измеряемые) строки из Ada.Strings.Unbounded, как предлагали Дейв и Марк С.
Другой - использовать немного функционального программирования (в данном случае рекурсия), чтобы создать вашу фиксированную строку.Например:
function Combined_String (String_Collection : in String_Collection_Type) return String is
begin
if String_Collection'length = 1 then
return String_Collection(String_Collection'first);
end if;
return String_Collection(String_Collection'first) &
Combined_String (String_Collection'first + 1 .. String_Collection'last);
end Combined_String;
Я не знаю, какой тип вы использовали для Collection, поэтому я делаю некоторые предположения.В частности, я предполагаю, что это неограниченный массив фиксированных строк.Если это не так, вам придется заменить часть приведенного выше кода тем, что ваш контейнер использует для возврата своих границ, доступа к элементам и выполнения нарезки.