У меня есть класс в Аде, который содержит матрицу.Я хочу реализовать функцию, которая возвращает его как тип constant access
, просто чтобы иметь возможность получить его как значение только для чтения, но избегая ненужной копии.
Я пробовал это, возвращая ссылку наЦелое число только для целей тестирования:
package Tests_Package is
type B is private;
function Test(Self : in B) return access constant Integer;
private
type B is tagged
record
I : aliased Integer;
end record;
end Tests_Package;
-------------------------------------------
package body Tests_Package is
function Test(Self : in B) return access constant Integer is
begin
return Self.I'access;
end Test;
end Tests_Package;
Выше не скомпилируется, ошибка: non-local pointer cannot point to local object.
Мои вопросы:
Почему именно я получаю эту ошибку?
Есть ли способ достичь того, чего я хочу, без использования Unchecked_Access
?
Нужно ли мне возвращать ссылку на переменную, или копия можетбыть оптимизирован компилятором Ada?