模板:用双重模板参数实现 简单的 policy 类
来源:互联网 发布:centos vi 保存退出 编辑:程序博客网 时间:2024/05/22 08:29
一、需求引入
前一篇博客说明了用普通类来实现policy的接口,接下来让我们用模板类来实现policy的接口
二、实现
第一种实现方式:policy是一个模板类: 类型模板类
template<typename T>
class AccumulationTraits;template<>
class AccumulationTraits<char> {
public:
typedef int AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<short> {
public:
typedef int AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<int> {
public:
typedef long AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<unsigned int> {
public:
typedef unsigned long AccT;
static AccT zero() {
return 0;
}
};
template<>
class AccumulationTraits<float> {
public:
typedef double AccT;
static AccT zero() {
return 0.0;
}
};
//policy实现
template <typename T1, typename T2>
class SumPolicy {
public:
static void accumulate (T1& total, T2 const & value) {
total += value;
}
};
//Accum 接口实现:双重模板参数
template <typename T,
template<typename,typename> class Policy = SumPolicy,
typename Traits = AccumulationTraits<T> >
class Accum {
public:
typedef typename Traits::AccT AccT;
static AccT accum (T const* beg, T const* end) {
AccT total = Traits::zero();
while (beg != end) {
Policy<AccT,T>::accumulate(total, *beg);
++beg;
}
return total;
}
};
第二种实现方式:policy是一个 非类型模板类
特点:可以适当的拓展
//非类型模板缺省参数
template<bool use_compound_op = true>
class SumPolicy {
public:
//成员模板
template<typename T1, typename T2>
static void accumulate (T1& total, T2 const & value) {
total += value;
}
};
//特化
template<>
class SumPolicy<false> {
public:
template<typename T1, typename T2>
static void accumulate (T1& total, T2 const & value) {
total = total + value;
}
};
- 模板:用双重模板参数实现 简单的 policy 类
- 模板:policy类的简单使用
- C++模板 - policy类
- C++模板 - policy类
- 模板Policy
- 第一章policy(特征,模板中的模板类)
- Template Template Parameters(双重模板参数)
- 模板的模板参数
- 复数模板类的简单实现
- list 模板类的简单实现
- hashtable模板的简单实现
- c++ 基于Policy 的 模板编程
- 堆的创建、插入、删除,模板参数实现堆以及模板的模板参数实现堆
- C++模板Policy
- C++模板 - traits & policy
- 学习C++模板---模板类带简单参数
- C++双重模板
- 模板类的默认模板参数、模板函数不支持默认模板参数
- NOI 2015 寿司晚宴 状压DP
- 最小二乘法
- 技术相关记录
- 后台学习之路(二)mysql 约束和修改数据表
- mtk fule gauge算法过程
- 模板:用双重模板参数实现 简单的 policy 类
- Leetcode——453. Minimum Moves to Equal Array Elements
- 更新一些堆栈的操作实现
- 斯坦福机器学习公开课随笔5
- OSGI企业应用开发(十三)OSGI Web应用开发(二)
- 设计模式的原则
- GreenDao 3.2.0 的基本使用
- 僵尸进程孤儿进程知识点
- android 移动数据流量打开导致获取wifi热点IP错误