To use an object of a class template, you must specify the
template arguments explicitly. The following example shows how to use the class
template Stack<>:
By declaring type Stack<int>, int is
used as type T inside the class template. Thus, intStack is
created as an object that uses a vector of ints as elements and, for
all member functions that are called, code for this type is instantiated.
Similarly, by declaring and using Stack<std::string>, an object
that uses a vector of strings as elements is created, and for all member
functions that are called, code for this type is instantiated.
Note that code is instantiated only for member functions that are called. For class templates,
member functions are instantiated only when they are used. This, of course,
saves time and space. It has the additional benefit that you can instantiate a
class even for those types that cannot perform all the operations of all the
member functions, as long as these member functions are not called. As an
example, consider a class in which some member functions use the operator
< to sort elements. If you refrain from calling these member
functions, you can instantiate the class template for types for which operator
< is not defined.
In this example, the default constructor, push(), and
top() are instantiated for both int and strings. However,
pop() is instantiated only for strings. If a class template has static
members, these are instantiated once for each type.
You can use a type of an instantiated class template as any
other type, as long as the operations are supported:
By using a type definition, you can make using a class template
more convenient:
Note that in C++ a type definition does define a "type alias"
rather than a new type. Thus, after the type definition
IntStack and Stack<int> are the same
type and can be used for and assigned to each other.
Template arguments may be any type, such as pointers to
floats or even stacks of ints:
The only requirement is that any operation that is called is
possible according to this type.
Note that you have to put whitespace between the two closing
template brackets. If you don't do this, you are using operator
>>, which results in a syntax error:
-----------------------------------------------------------------
See Also:
-----------------------------------------------------------------
See Also:
-----------------------------------------------------------------
- Complete Tutorial of C++ Template's
- Standard Template Library Tutorial
- Inter Process Communication Tutorial
- Advance Programming in C & C++
-----------------------------------------------------------------
No comments:
Post a Comment