类模板 成员模板
可以把类模板 函数模板 作为类的成员
可以在类声明外定义:(如下)
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
class beta
{
private:
template <typename V> //class
class hold;
hold<T> q; // template object
hold<int> n; // template object
public:
beta( T t, int i) : q(t), n(i) {}
template<typename U> //method
U blab(U u, T t);
void Show() const { q.show(); n.show();}
};
template <typename T>
template <typename V> //class
class beta<T>::hold
{
private:
V val;
public:
hold(V v = 0) : val(v) {}
void show() const { cout << val << endl; }
V Value() const { return val; }
};
template <typename T>
template <typename U>
U beta<T>::blab(U u,T t)
{
return (n.Value() + q.Value()) * u / t;
}
/////////////////////////////////////////////
//
// tempmemb.cpp -- template members
//
/////////////////////////////////////////////
#include <iostream>
using std::cout;
using std::endl;
template <typename T>
class beta
{
private:
template <typename V> // nested template class member
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; // template object
hold<int> n; // template object
public:
beta( T t, int i) : q(t), n(i) {}
template<typename U> // template method
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);
guy.Show();
cout << guy.blab(10, 2.3) << endl;
cout << "Done\n";
return 0;
}


浙公网安备 33010602011771号