You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Nim中通过模板定义带可变数量泛型参数的同名过程?

用单个模板生成不同泛型参数数量的过程(Proc)

我需要生成三个逻辑完全一致,但泛型参数数量不同的过程,避免重复编写三次相同代码。最终要得到的代码如下:

proc Test*(self: var Test_Type_Zero) = 
  echo $self.Name

proc Test*[A](self: var Test_Type_One[A]) = 
  echo $self.Name

proc Test*[A, B](self: var Test_Type_Two[A, B]) = 
  echo $self.Name

不需要为不同泛型数量写独立模板,而是用一个通用模板实现,调用方式如下:

template Test_Template*(vType: untyped, vGen: untyped) =
  when vGen is void:
    proc Test*(self: var vType) = 
      echo $self.Name
  else:
    proc Test*`vGen`(self: var vType`vGen`) = 
      echo $self.Name

# 调用模板生成目标过程
Test_Template(Test_Type_Zero, void)
Test_Template(Test_Type_One, [A])
Test_Template(Test_Type_Two, [A, B])

说明

  • 模板用untyped类型参数接收目标类型vType和泛型参数列表vGen,用void标记无泛型的情况
  • 通过when分支做语法适配:无泛型时直接生成不带泛型列表的proc,有泛型时利用Nim的语法拼接特性,把泛型参数列表嵌入到proc和类型定义中
  • 这样就能用同一个模板生成不同泛型参数数量的过程,完全复用核心逻辑

内容的提问来源于stack exchange,提问作者Nate Ackerman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:26:01