摘要:
在上一节中所使用的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)

浙公网安备 33010602011771号