【发布时间】:2015-10-25 06:18:31
【问题描述】:
我正在尝试使用自动初始化的单例变量创建一个包。如果单例变量不是受控类型,那么编译器不会抱怨,但是当我控制它时,我会收到警告:“在看到主体之前无法调用 Initialize”
接着: “程序错误将在运行时引发。”
所以,我认为编译器希望对子对象隐藏单例变量,但这不是我想要的。这是我的代码:
with Ada.Finalization;
package static_member is
type singleton_type is tagged limited private;
private
type singleton_type is new Ada.Finalization.Limited_Controlled with record
data_to_init: Natural;
end record;
overriding procedure Initialize(data: in out singleton_type);
overriding procedure Finalize(data: in out singleton_type);
--This is where I get the warnings.
--I want singleton to be visible to child objects.
singleton: singleton_type;
end static_member;
那么包体就是:
package body static_member is
overriding procedure Initialize(data: in out singleton_type) is
begin
data.data_to_init := 0;
end Initialize;
overriding procedure Finalize(data: in out singleton_type) is null;
end static_member;
如何创建一个已初始化并在开始创建对象实例时可以使用的单例变量?提前致谢。
【问题讨论】:
-
您是否有理由不使用通常的 Ada 实现单例模式? (即隐藏包体中的状态。)
-
因为我希望子对象能够从这个单例中读取。我想我可以做一个访问函数。
-
实际上,即使我将单例移到正文中,我也会收到相同的警告。
-
但是你有没有把单例 after
Initialize移动到正文中? -
谢谢西蒙!成功了!
标签: singleton ada static-members static-initialization