我可以限制泛型类型参数以要求Default_Value方面吗?

时间:2014-04-11 08:00:36

标签: generics ada

Ada 2012为类型提供Default_Value方面。有没有办法限制泛型类型参数要求它们有一个默认值(或者甚至有一般方法来检查任何方面?)

基本上我的问题是如果以下示例可以安全。目前gnat发出警告

  

main.adb:6:03:警告:变量“Var”被读取但从未被分配[-gnatwv

当我没有用with Default_Value => 10.0定义MyFloat时。

-- main.adb
with MyProc;

procedure test is
  type MyFloat is new Float with Default_Value => 10.0;
  package P is new MyProc (MyFloat);
  Var : P.Bla;
  Var2 : MyFloat := P.Stuff (Var);
begin
  null;
end test;

-- MyProc.ads
generic
  type MyTypeWithDefault is private;
package MyProc is
  type Bla is tagged private;
  function Stuff (Self : Bla) return MyTypeWithDefault;
private
  type Bla is tagged record
    Data : MyTypeWithDefault;
  end record;
end MyProc;

-- MyProc.adb
package body MyProc is
  function Stuff (Self : Bla) return MyTypeWithDefault is
  begin
    return Self.Data;
  end Stuff;
end MyProc;

1 个答案:

答案 0 :(得分:0)

你可以在Ada 2012之前的风格中做到这一点:

generic
  type MyTypeWithDefault is private;
  Default_Value : in MyTypeWithDefault;
package MyProc is
  type Bla is tagged private;
  function Stuff (Self : Bla) return MyTypeWithDefault;
private
  type Bla is tagged record
    Data : MyTypeWithDefault:= Default_Value;
  end record;
end MyProc;

但你确实提出了一个好点;应该有一些方法来指定泛型的形式参数中的新方面。