摘要: 在上一节中所使用的trait被称为fixed trait,因为一旦定义了这个分离的trait,就不能在算法中对它进行改写,然而,在有些情况下,我们需要对trait进行改写。例如:我们可能偶尔发现可以对一组float值进行求和,然后很安全的把和值存储在一个具有相同类型(即float型)的变量里面,而且这样通常会给我们带来更高的效率。因此,我们更改我们的求和模版://accum5.h#ifndef ACCUM_H#define ACCUM_H#include"accumtraits4.h"template<typename T,typename AT = Accumula 阅读全文
posted @ 2011-11-02 23:19 MagiCube 阅读(381) 评论(0) 推荐(0)
摘要: 在上节的代码中,构造函数AccT()不一定会返回一个符合条件的值,而且类型AccT也不一定具有一个缺省的构造函数。我们可以再次使用trait来解决这个函数。//accumtraits3.htemplate<typename T>class AccumulationTraits;template<>class AccumulationTraits<char>{public: typedef int AccT; static AccT const zero = 0;};template<>class AccumulationTraits<sho 阅读全文
posted @ 2011-11-02 22:48 MagiCube 阅读(308) 评论(0) 推荐(0)
摘要: 要求:编写一个能适合许多类型的模板来完成一个累加操作解答1://定义一个模板函数#ifndef ACCUM_H#define ACCUM_Htemplate<typename T>inlineT accum(T const* beg,T const* end){ T total=T();//假设T()事实上会产生一个等于0的值 while(beg != end) { total += *beg; ++beg; } return total;}#endif解析:上面的代码,有两个问题:(1)如何正确生成一个0值,以便开展我们的求和过程。(... 阅读全文
posted @ 2011-11-02 00:29 MagiCube 阅读(296) 评论(0) 推荐(0)