ATL布幔之下的秘密(3)
2006-07-22 22:54:58 来源:WEB开发网核心提示: #include <iostream>using namespace std;template <typename T>class TestClass {public:void F(T pT) {cout << "T version"
#include <iostream>
using namespace std;
template <typename T>
class TestClass {
public:
void F(T pT) {
cout << "T version" << ''\t'';
cout << pT << endl;
}
};
template <>
class TestClass<int> {
public:
void F(int pT) {
cout << "int version" << ''\t'';
cout << pT << endl;
}
};
int main() {
TestClass<char> obj1;
TestClass<int> obj2;
obj1.F(''A'');
obj2.F(10);
return 0;
}
程序的输出为:
T version A
int version 10
ATL中就有若干类是类似这样的特化版本,例如在ATLBASE.H中定义的CComQIPtr。
模板也可以在不同的设计模式中使用,例如策略设计模式可以使用模板实现。
程序45.
#include <iostream>
using namespace std;
class Round1 {
public:
void Play() {
cout << "Round1::Play" << endl;
}
};
class Round2 {
public:
void Play() {
cout << "Round2::Play" << endl;
}
};
template <typename T>
class Strategy {
private:
T objT;
public:
void Play() {
objT.Play();
}
};
int main() {
Strategy<Round1> obj1;
Strategy<Round2> obj2;
obj1.Play();
obj2.Play();
return 0;
}
在这里,Round1和Round2为一个游戏中不同的关卡类,并且Strategy类依靠传递的模板参数来决定该做些什么。
更多精彩
赞助商链接