Can a class inherit from another class template concretized by itself?
本问题已经有最佳答案,请猛点这里访问。
我检查了一些代码,发现了如下情况:
1 | class GarbageCollectorProcess : public process::Process<GarbageCollectorProcess> |
我想知道这是否是一件有效的事情。如果是,这是否会导致某种自定义循环,因为我们正在使用另一个依赖于GarbageCollector进程定义的类来定义GarbageCollector进程?
"I was wondering if this was a valid thing to do."
是的,这是有效的,也是一种非常常见的模式,称为奇怪的循环模板模式,简称CRTP。
例如,它用于实现静态多态性。
"If yes, shouldn't this lead to some kind of a self definition loop because we are defining a GarbageCollectorProcess using another class that depends on the definition of GarbageCollectorProcess?"
不,没有自我定义循环。模板类只实例化一次。
这是正确的做法。这就是CRTP的工作原理。