文章来自微信公众号“科文路”,欢迎关注、互动。转发须注明出处。
由于名称 CRTP 没啥内涵也不好记,我这里就称其为“传入继承”吧。“传入”可以助记 CR TP,也指代需要把自身传进父类。
MLIR 中使用 C++ 定义新的 Op
时,就避不开 CRTP (Curiously Recurring Template Pattern) 这么个神奇的 C++ 设计模式。
比如下面这段代码,
1 | class ConstantOp : |
可以看到,我们需要定义的 ConstantOp
出现在了右侧父类的模板参数列表中。果然 curiously enough (神奇)。
这里借用 cppreference 的例子一起学习一下这个需要把自身交代给父类的继承方式,由于原始名称 CRTP (奇异递归模板模式)没啥内涵也不好记,我这里就称其为“传入继承”吧。“传入”可以助记 CR TP,也指代需要把自身传进父类。