扩展模板化数据结构(继承)

Sar*_*emp 5 rpg rpgle

我一直在阅读有关LIKEDS,TEMPLATEBASED试图确定是否有一种方式来与继承创建数据结构模板(原型).我有:

D costs           DS                  QUALIFIED TEMPLATE
D  material                      6  0
D  cutting                       6  0
D  ...etc...

D boxCosts        DS                  LIKEDS(costs)
D  folding                       6  0
D  ...etc...

D posterCosts     DS                  LIKEDS(costs)
D  laminating                    6  0
D  ...etc...
Run Code Online (Sandbox Code Playgroud)

我希望boxCosts看起来像:

boxCosts:
  material
  cutting
  folding
  etc. (no laminating, this isn't a poster)
Run Code Online (Sandbox Code Playgroud)

有没有办法实现这种类型的数据结构模板?我知道我能做到:

D boxCosts        DS                  
D  common                             LIKEDS(costs)
D  folding                       6  0
D  ...etc...
Run Code Online (Sandbox Code Playgroud)

但是当我想要一个扁平结构时,这会创建一个层次结构

我也许可以用一本字帖来做这件事,但我不知道在我自己的文件中只提供我想要的数据结构部分的副本是否会更糟,或者为整个应用程序提供可能复杂的条件副本复制这些信息的区域很小......?模板非常接近我想要的东西我怀疑我必须丢失一些东西.

如果您想知道,我尝试创建一个继承的数据结构时得到的编译错误就像我已经显示的那样是RNF3703: The subfield or parameter definition is not specified within a group.LIKEDS关键字下方的第一个D规范上.

谢谢阅读.

Buc*_*bro 3

RPG 数据结构是内存映射。它们定义了一种在内存中以特定方式对变量进行分组和重叠的方法。这就是为什么如果您使用 LIKEDS() ,您会得到一个层次结构 - 编译器会将层次结构从模板复制到您的目标。

至少有一种方法可以扁平化结构:

 d costs           ds                  template
 d  t_material                    6s 0
 d  t_cutting                     6s 0

 d box           e ds                  extname(boxcosts) prefix(t_) template

 d boxCosts        ds                  qualified
 d  material                           like(t_material)
 d  cutting                            like(t_cutting)
 d  folding                            like(t_folding)

   boxCosts.cutting = 1;
   boxCosts.folding = 2;
Run Code Online (Sandbox Code Playgroud)

程序中定义了第一个结构体;第二个基于文件。我这样做只是为了展示定义子字段的两种不同方法。