类模板 成员模板

可以把类模板   函数模板 作为类的成员


可以在类声明外定义:(如下)
#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;
}

posted @ 2007-03-07 07:17  Edward Xie  阅读(317)  评论(0)    收藏  举报