CRTP是一种派生类的声明方式,其“奇特”之处就在于:派生类会将本身作为模板参数传递给其基类。
template<typename T>
class 中国海军
{
public:
static void 模拟演习() {
T::执行();
}
};
class 北海舰队 : public 中国海军<北海舰队>
{
public:
static void 执行() {
cout << "派出二艘攻击型核潜艇,一群航母战队。" << endl;
}
};
class 南海舰队 : public 中国海军<南海舰队>
{
public:
static void 执行() {
cout << "派出1000艘登陆艇,一群航母战队。" << endl;
}
};
class 东海舰队 : public 中国海军<东海舰队>
{
public:
static void 执行() {
cout << "派出10000架无人机,一群航母战队。" << endl;
}
};
int main() {
中国海军<北海舰队> a;
中国海军<南海舰队> b;
中国海军<东海舰队> c;
a.模拟演习();
b.模拟演习();
c.模拟演习();
}
输出: