Image
Image

elecintop

+ 关注

粉丝 3     |     主题 176     |     回帖 1329

C++模板元编程(C++ template metaprogramming)
2018-12-17 16:34
  • 万利电子
  • 89
  • 9811
  ......  
  具体来说 C++ 模板可以做以下事情:编译期数值计算、类型计算、代码计算(如循环展开),其中数值计算实际 ...  
  C++ 模板是图灵完备的,这使得 C++ 成为两层次语言(two-level languages,中文暂且这么翻译,文献[9]), ...  
  2. 模板元编程概述 如果对 C++ 模板不熟悉(光熟悉语法还不算熟悉),可以先跳过本节,往下看完例子再回来 ...  
  C++11 关于模板的新特性(详见文献[1]第15章,文献[4]C++11): “>>” 根据上下文自动识别正确语义; 函 ...  
  一个例子如下(需要 GCC 编译,GCC 对 C++11 几乎全面支持,VS2013 此处总是在基类中查找名字,且函数模板 ...  
  关于 template、typename、this 关键字的使用(文献[4]模板,文献[5]): 依赖于模板参数(template param ...  
  上例中,由于 a.cpp 和 b.cpp 中的 print 实例等价(模板实例的二进制代码在编译生成的对象文件 a.obj、b.o ...  
  实例化,编译链接的简单例子如下(参考了文献[1]第10页):  
  关于模板的编译和链接(详见文献[1] 1.3、文献[4]模板): 包含模板编译模式:编译器生成每个编译单元中遇 ...  
  纠正方法是使用模板特例化,如下:  
  上面的错误是因为,当编译 aTMP 时,并不判断 N==0,而仅仅知道其依赖 aTMP(lazy instantiation),从而 ...  
  所以模板代码写完后最好写个诸如显示实例化的测试代码,更深入一些,可以插入一些模板调用代码使得编译器及 ...  
  隐式实例化时,成员只有被引用到才会进行实例化,这被称为推迟实例化(lazy instantiation),由此可能带来 ...  
  关于模板实例化(template instantiation)(详见文献[4]模板): 指在编译或链接时生成函数模板或类模板 ...  
  对模板的多个实例,类型等价(type equivalence)判断规则(详见文献[2] 13.2.4):同一个模板(模板名及其 ...  
  关于模板特例化(详见文献[1]第4章): 在定义模板特例之前必须已经有模板通例(primary template)的声明 ...  
  更多模板特例化的例子如下(参考了文献[1]第44页):  
  所谓模板特例化即对于通例中的某种或某些情况做单独专门实现,最简单的情况是对每个模板参数指定一个具体值 ...  
  C++11 引入变长模板参数,请见下文。 模板特例化(template specialization,又称特例、特化)的简单示例如 ...  
2
3
近期访客