假设有以下需求:
要给N个公司发信息,目前有Alibaba、Microsoft、Amazon三家公司,给Microsoft、Amazon发送明文,给Alibaba发送密文(特殊情况),可以用C++模板技术来实现。
class Alibaba{
public:
//给Alibaba发送密文
static void SendCryMsg(){
std::cout << "10010101100011100111" << std::endl;
}
};
class Microsoft{
public:
//给Microsoft发送明文
static void SendMsg(){
std::cout << "Microsoft" << std::endl;
}
};
class Amazon{
public:
//给Amazon发送明文
static void SendMsg(){
std::cout << "Amazon" << std::endl;
}
};
//MsgSender模板类
template <typename Company>
class MsgSender{
public:
void Send(){
Company::SendMsg();
}
};
//针对Alibaba的特殊情况,模板特化
template <>
class MsgSender<Alibaba>{
public:
void Send(){
Alibaba::SendCryMsg();
}
};
template <typename Company>
class LogginMsgSender: public MsgSender<Company>{
public:
void SendMessage(){
//注意这里要这样写
MsgSender<Company>::Send();
//或者
this->Send();
//不能这样写
//Send(); --->错误
//当继承模板类的情况下,**编译器不会进入base作用域内查找**
}
};
int main() {
LogginMsgSender<Microsoft> mi;
mi.SendMessage();
}