如何在Chapel中编写模板函数的类型签名



在尝试编写算术平均函数时,编写一个模板函数可能比编写两个特定类型的函数更好。你可以这样写: proc mean(data: [?] ?T): real 而是如何限制T为intreal

也有可能定义一个数组,可以有intreal数据,即有表达数组内容的联合类型的方式?

要将T的类型限制为任意大小的intreal类型,可以在函数定义中添加where子句:

proc mean(data: [] ?T): real where isIntType(T) || isRealType(T) { ... }

isIntTypeisRealType函数在Types模块中定义:http://chapel.cray.com/docs/latest/modules/standard/Types.html

Chapel支持安全联合和联合数组。在Chapel语言规范的第17节中描述了联合:http://chapel.cray.com/docs/latest/_downloads/chapelLanguageSpec.pdf

union IntOrReal {
  var i: int;
  var r: real;
}
var intRealArray: [1..2] IntOrReal;
intRealArray[1].i = 1;
intRealArray[2].r = 2.0;

相关内容

  • 没有找到相关文章

最新更新