背景:
最近在读罗能的《c++20高级编程》这本书,对里边这块描述非常感兴趣,下边我就针对这个知识点,写的测试代码
代码
#include <iostream>
template <typename T>
class Base
{
public:
void printf()
{
((T *)this)->printf();
}
};
class Dog :public Base<Dog>
{
public:
void printf()
{
std::cout<<"Dog"<<std::endl;
}
};
class Cat:public Base<Cat>
{
public:
void printf()
{
std::cout<<"Cat"<<std::endl;
}
};
template<typename T>
void Dispatch(Base<T> &base)
{
base.printf();
}
int main()
{
Dog dog;
Cat cat;
Dispatch(dog);
Dispatch(cat);
}
结论:
这种编译期间,就决定了调用哪个类的方法,甚是巧妙