码迷,mamicode.com
首页 > 编程语言 > 详细

C++模板编程 - 第九章 模板中的名称

时间:2015-06-28 14:09:22      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

名称的分类

1. 受限名称:前面有::运算符成员访问运算符。比如 this->var 

2. 依赖型名称:以某种方式依赖于模板参数。比如 std::vector<T>::iterator 

更详细的分类见P116。

名称查找

 1 int x;
 2 
 3 class B
 4 {
 5 public:
 6     int i;
 7 };
 8 
 9 class D: public B
10 {
11 };
12 
13 void f(D* pd)
14 {
15     pd->i=3;    //ok
16     D::x=2;    // wrong, obviously
17 }
18 
19 ==================================================
20 
21 extern int count; // 1
22 
23 int lookup(int count) // 2
24 {
25     if(count<0)
26     {
27         int count =1; // 3
28         lookup(count); // 3
29     }
30     return count+::count; // 1+2
31 }
32 
33 ==================================================
34 
35 // a tricky one
36 template<typename T>
37 inline T const & max(const T & a, const T & b)
38 {
39     return a<b?b:a;
40 }
41 
42 namespace BigMath
43 {
44     class BigNumber
45     {
46         bool operator<(const BigNumber &, const BigNumber &);
47     };
48 }
49 
50 using BigMath::BigNumber;
51 
52 void g(const BigNumber & a, const BigNumber & b)
53 {
54     BigNumber x = max(a, b);    // max needs to know namespace BigMath
55 }

(看起来C++在名称的查找这里是有坑的,不过我暂且跳过)

解析模板

上下文相关性:C++是上下文相关的语言

1 X<1>(0) == (X<1) > 0?

另一个坑

1 class X
2 {
3     ...
4 };
5 
6 List<::X> many_X;     // Noooooo! <: is a digraph which is [
7 List< ::X> some_X;    // Good

 

 

changelog:

2015/6/28 看到模板解析。

C++模板编程 - 第九章 模板中的名称

标签:

原文地址:http://www.cnblogs.com/ch3cooh/p/cpp_template_ch9.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!