why templates are used in c++ :
C++ requires us to declare variables, functions, and most other 
kinds of entities using specific types. However, a lot of code looks the same 
for different types. Especially if you implement algorithms, such as quicksort, or if you implement the behavior of data 
structures, such as a linked list or a binary tree for different types, the code 
looks the same despite the type used.
If your programming language doesn't support a special language 
feature for this, you only have bad alternatives:
- 
You can implement the same behavior again and again for each type that needs this behavior.
 - 
You can write general code for a common base type such as Object or void*.
 - 
You can use special preprocessors.
 
If you come from C, Java, or similar languages, you probably 
have done some or all of this before. However, each of these approaches has its 
drawbacks:
- 
If you implement a behavior again and again, you reinvent the wheel. You make the same mistakes and you tend to avoid complicated but better algorithms because they lead to even more mistakes.
 - 
If you write general code for a common base class you lose the benefit of type checking. In addition, classes may be required to be derived from special base classes, which makes it more difficult to maintain your code.
 - 
If you use a special preprocessor such as the C/C++ preprocessor, you lose the advantage of formatted source code. Code is replaced by some "stupid text replacement mechanism" that has no idea of scope and types.
 
Templates are a solution to this problem without these 
drawbacks. They are functions or classes that are written for one or more types 
not yet specified. When you use a template, you pass the types as arguments, 
explicitly or implicitly. Because templates are language features, you have full 
support of type checking and scope.
In today's programs, templates are used a lot. For example, 
inside the C++ standard library almost all code is template code. The library 
provides sort algorithms to sort objects and values of a specified type, data 
structures (so-called container classes) to 
manage elements of a specified type, strings for which the type of a character 
is parameterized, and so on. However, this is only the beginning. Templates also 
allow us to parameterize behavior, to optimize code, and to parameterize 
information. This is covered in later chapters. Let's first start with some 
simple templates.
No comments:
Post a Comment