成员模板
模板可作为结构,类,模板类的成员,模板函数也可以作为模板类的成员.
用U ,T ,V 三个类型参数设计一个模板类.
template <typename T> // T为这个模板类的类型参数
class beta
{
private:
template <typename V> // 在类中也可以使用模板
class hold
{
private:
V val;
public:
hold(V v = 0)
: val(v){}
void show() const {cout << val << endl;}
V Value() const{ return val; }
};
hold<T> q; // beta类中模板类对象
hold<int> n; // beta类中模板类对象
public:
beta(T t , int i)
: q(t) , n(i){}
template <typename U> // beta类中模板函数
U blab(U u,T t)
{
return (n.Value() + q.Value()) * u / t ;
}
void Show() const
{
q.show();
n.show();
}
};
测试函数:
int main()
{
beta<double> guy(3.5, 3);
cout << "T was set to double\n";
guy.Show();
cout << "V was set to T, which is double, then V was set to int\n";
cout << guy.blab(10, 2.3) << endl; // 调用blab(U ,T )方法
cout << "U was set to int\n";
cout << guy.blab(10.0, 2.3) << endl;
cout << "U was set to double\n";
cout << "Done\n";
return 0;
}
结果如下:
由于blab成员函数第一个是泛型参数,所以返回U的值不同,10返回的是整形,10.0返回的double型.