我想基於以下接口一組解析器Ada中的模型:Ada接口鑄造?
package Parsers is
type Parser is interface;
type DataArray is array(Integer range <>) of String(1..100);
function Parse(Object : access Parser; FilePath : String) return DataArray is abstract;
end Parsers;
第一分析器接口成員低於文本分析器顯示:
with Parsers;
package TextParsers is
type Parser is new Parsers.Parser with null record;
overriding function Parse(Object : access Parser; FilePath : String) return Parsers.DataArray;
end TextParsers;
with Parsers;
use Parsers;
package body TextParsers is
overriding function Parse(Object : access Parser; FilePath : String) return Parsers.DataArray is
Data : Parsers.DataArray (0..144);
begin
-- just stubbed out
return Data;
end Parse;
end TextParsers;
最後,我想有一個工廠方法創建基於路徑上的這些解析器提供,例如,檢測,如果它是一個txt文件或者一個CSV等。這裏是工廠代碼:
with Parsers;
use Parsers;
package ParserFactories is
function GetParser(Path : String) return Parsers.Parser;
end ParserFactories;
with Parsers, TextParsers;
package body ParserFactories is
function GetParser(Path : String) return Parsers.Parser is
Text : TextParsers.Parser;
Parse : Parsers.Parser'Class := Text;
begin
return Parse;
end GetParser;
end ParserFactories;
我不斷收到「動態標記的表達式不允許」編譯器錯誤,我無法弄清楚如何創建這些實現解析器接口並將其從此函數中返回的對象。有沒有辦法在Ada中做到這一點?
+1,但應該可以擴展。在Ada中,如果你指定一個類型,你將總是得到那種類型。如果你想讓這個類型成爲「這個類型或從它派生的任何東西」,你需要使用''class'。 – 2012-07-23 17:19:21