http://community.csdn.net/Expert/topic/3376/3376764.xml?temp=.5283472
解决方案 »
- MFC 对话框 ,截取对话框上的一部分保存为图片
- 求一小算法,或者API
- 成员变量和局部变量的疑问!
- 怎样在CMyView类里访问CMainFrame里面的Protected函数啊?
- 谁能提供小波去噪声或者小波检测突变信号的c代码,谢谢!
- vb directdraw 里的bitfx如何使用 vb那里没有回答
- ahao接分!!!
- 大难题:在View中动态生成RichEditCtrl后,如何在RichEditCtrl中显示链接或嵌入图片的RTF文档?
- VC 6.0链接错误 'long' followed by 'long' is illegal
- operator是什么意思?我一直没搞明白。谁能详细点说说?
- 高价购买视频会议源代码有意者请与我联系!!
- 关于Socket通信的问题!!!急!!!
举个例子吧:
template <class T, class T1 = const T&>
class CTest
//定义一个模板类CTest,第二个参数类型T1缺省为第一个类型T的引用
{
public:
CTest (); //构造函数
void Add(T1 t); //有点像CArray中的Add()吧^_^用的形式参数类型是T1
private:
T a;
//定义一个T类型成员变量,其实就像CArray中的存放数据的类型
};接着在CPP中定义函数的实现,注意每个成员函数前要加上template <class T, class T1>.
//构造函数
template <class T, class T1>
CTest<T,T1>::CTest()
{
}//Add()函数的实现
template <class T, class T1>
void CTest<T,T1>::Add(T1 t)
{
a = t;
}到些为止,这个模板类就算成功了。现在我们就试验二个问题:
1、是否可以只填一个参数呢,答案是肯定的,可以!!
int itest = 2;
CTest<int> ttt; //注意这里只填了一个参数类型,第二个参数类型缺省为int&
ttt.Add(itest);
2、如用第一个问题中的代码,Add(T1 t)中的这个t是否是itest的引用参考呢?答案也是肯定的。口说无凭,你只要在调试中时取itest的地址,单步执行至Add()函数内,取形参t的地址,你会发现这两个地址是一至的,这就表明T1这个数据类型的确是T的引用。