, - :
template< typename T = int >
class Test
{
//...
};
- . :
1. . , , , :
//
Stack (int _size = 10);
, :
//
Stack< T > & operator = (const Stack< T >& _s);
2. , , . , :
template< typename T >
Stack< T >::Stack (int _size)
: m_size(_size)
{
m_pData = new T[ m_size ];
m_pTop = m_pData;
}
3. . , (inline). CPP- - . . , C++, . , .
4. , . - ? , (, char) :
void push (const T& _value);
Test. , - , VTABLE -.
. , .
|
|
, - , - . , , , . -, . ++: , , . , , .
. , , . . .
, . , (, Visual Studio 2010) . , >> , 2 :
std::vector< std::vector< int >> vv;
:
std::vector< std::vector< int > > vv;
// ^
, . , , T value_type:
template< typename T >
class Test
{
T::value_type x;
};
. , , , <, . template:
class Test
{
public:
template< typename T>
int f (T _x);
};
template< typename T >
void f (T _x)
{
Test t;
std::cout << t. template f< T >(_x);
// : std::cout << t.f< T >(_x);
}
. , , . , . , .
|
|
,
. . , , , , :
template < typename T, int SIZE = 10 >
class Stack
{
private:
T data[ SIZE ];
int numElems;
public:
Stack();
void push(const T &);
void pop();
T & top() const;
bool empty() const;
bool full() const;
};
- ( ). . , , , :
if (SIZE > 10)
do1();
else
do2();
., , SIZE > 10 . , . SIZE , . do1(), do2(), SIZE, .
- ( - template template parameters). , - . , , ( ), :
template < typename T,
template < typename ELEM > class CONT = std::list >
class Queue
{
private:
CONT<T> elems;
public:
void push (T const & _v)
{
elems.push_back(_v);
}
void pop ()
{
elems.pop_front();
}
T top () const
{
return elems.front();
}
bool empty () const
{
return elems.empty();
}
};
T:
Queue< T > q1; // Queue< T, std::list >
, , :
Queue< T, std::deque > q1;
, std::list std::deque - . , , .