Ru-Brd |
Chapter 9. Names in TemplatesNames are a fundamental concept in most programming languages. They are the means by which a programmer can refer to previously constructed entities. When a C++ compiler encounters a name , it must "look it up" to identify to which entity is being referred. From an implementer's point of view, C++ is a hard language in this respect. Consider the C++ statement x*y; .If x and y are the names of variables , this statement is a multiplication, but if x is the name of a type, then the statement declares y as a pointer to an entity of type x . This small example demonstrates that C++ (like C) is a so-called context-sensitive language : A construct cannot always be understood without knowing its wider context. How does this relate to templates? Well, templates are constructs that must deal with multiple wider contexts: (1) the context in which the template appears, (2) the context in which the template is instantiated, and (3) the contexts associated with the template arguments for which the template is instantiated . Hence it should not be totally surprising that "names" must be dealt with quite carefully in C++. |
Ru-Brd |