Stewart778
Results
2
comments of
Stewart778
博主最后一个case的实现并没有利用到CRTP的性质 事实上由于`Cat`和`Animal_CRTP`同时拥有签名相同的`say()`使得`Cat`中的`say()`依然也是被重写的虚函数,所以`(*iter)->say()`实际上直接调用了`Cat`的虚函数`say()`. 可以通过在`Animal_CRTP`中修改`say()`的实现来证明: ``` void say() const override { cout
> @Stewart778 晚点我看一下。 > > 写这篇的时候还很稚嫩,很可能写的不对的。 No offence for my final sentence. 我个人也是新手,用到CRTP更多是类似duck type的用法 比如: ``` template void foo(Animal_CRTP& concreteAnimal){ concreteAnimal.say(); } foo(Cat()); foo(Dog()); ``` 感觉利用统一的基类指针操纵子类对象还是一个相当dynamic多态的操作,仅个人意见