У меня есть универсальный пакет со следующей подписью
generic
type T is private;
with function "="(Left : T; Right : T) return Boolean is <>;
with function Wide_Wide_Image(Self : T) return Wide_Wide_String is <>;
package Generics.Testing.Assertions is
У него есть дочерний пакет со следующей подписью
generic
with function "<"(Left : T; Right : T) return Boolean is <>;
with function ">"(Left : T; Right : T) return Boolean is <>;
package Generics.Testing.Assertions.Comparisons is
Я пытаюсь создать экземпляр этого внутри другого пакетас интересной проблемой.
Это прекрасно работает:
package Integer_Assertions is new Generics.Testing.Assertions(
Integer,
Wide_Wide_Image => Integer'Wide_Wide_Image);
Когда это становится странным, когда я пытаюсь создать экземпляр дочернего пакета с помощью:
package Integer_Comparisons is new Integer_Assertions.Comparisons;
GPS находитComparisons
пакет в Integer_Assertions
просто отлично, как и должно быть.Но компилятор имеет две следующие ошибки:
missing "with Integer_Assertions.Comparisons;"
и
"Comparisons" not declared in "Integer_Assertions"
Хорошо?Но IntelliSense нашел это нормально.Хотя я давно не занимался разработкой Ada, поэтому, возможно, я забыл, как создать экземпляр универсального потомка универсального.
Поэтому вместо этого я пытаюсь использовать полное имя неэкземпляра:
package Integer_Comparisons is new Generics.Testing.Assertions.Comparison;
Который потерпел неудачу с:
invalid prefix in selected component "Generics.Testing.Assertions"
Насколько я помню, это должно быть.
Как мне на самом деле создать экземпляр потомка внутри пакета?