如何在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
相关产品推荐
相关产品推荐

