è¦æ¥çè±è¯åæï¼è¯·å¾éâè±è¯âå¤éæ¡ãä¹å¯å°é¼ æ æéç§»å°ææ¬ä¸ï¼å¨å¼¹åºçªå£ä¸æ¾ç¤ºè±è¯åæã
|
ç¿»è¯
è±è¯
|
åµå¥ç类模æ¿
Visual Studio 2015
Â
// nested_class_template1.cpp // compile with: /EHsc #include <iostream> using namespace std; class X { template <class T> struct Y { T m_t; Y(T t): m_t(t) { } }; Y<int> yInt; Y<char> yChar; public: X(int i, char c) : yInt(i), yChar(c) { } void print() { cout << yInt.m_t << " " << yChar.m_t << endl; } }; int main() { X x(1, 'a'); x.print(); }
1 a
// nested_class_template2.cpp // compile with: /EHsc #include <iostream> using namespace std; template <class T> class X { template <class U> class Y { U* u; public: Y(); U& Value(); void print(); ~Y(); }; Y<int> y; public: X(T t) { y.Value() = t; } void print() { y.print(); } }; template <class T> template <class U> X<T>::Y<U>::Y() { cout << "X<T>::Y<U>::Y()" << endl; u = new U(); } template <class T> template <class U> U& X<T>::Y<U>::Value() { return *u; } template <class T> template <class U> void X<T>::Y<U>::print() { cout << this->Value() << endl; } template <class T> template <class U> X<T>::Y<U>::~Y() { cout << "X<T>::Y<U>::~Y()" << endl; delete u; } int main() { X<int>* xi = new X<int>(10); X<char>* xc = new X<char>('c'); xi->print(); xc->print(); delete xi; delete xc; }
X<T>::Y<U>::Y() X<T>::Y<U>::Y() 10 99 X<T>::Y<U>::~Y() X<T>::Y<U>::~Y()
æ¾ç¤º: