/* The following code example is taken from the book
* "C++ Templates - The Complete Guide"
* by David Vandevoorde and Nicolai M. Josuttis, Addison-Wesley, 2002
*
* (C) Copyright David Vandevoorde and Nicolai M. Josuttis 2002.
* Permission to copy, use, modify, sell and distribute this software
* is granted provided this copyright notice appears in all copies.
* This software is provided "as is" without express or implied
* warranty, and with no claim as to its suitability for any purpose.
*/
#include <iostream>
// PolicySelector<A,B,C,D> creates A,B,C,D as base classes
// - Discriminator<> allows having even the same base class more than once
template <typename Base, int D>
class Discriminator : public Base {
};
template <typename Setter1, typename Setter2,
typename Setter3, typename Setter4>
class PolicySelector : public Discriminator<Setter1,1>,
public Discriminator<Setter2,2>,
public Discriminator<Setter3,3>,
public Discriminator<Setter4,4> {
};
// default policies
class DefaultPolicy1 {};
class DefaultPolicy2 {};
class DefaultPolicy3 {
public:
static void doPrint() {
std::cout << "DefaultPolicy3::doPrint()\n";
}
};
class DefaultPolicy4 {};
// define default policies as P1, P2, P3, P4
class DefaultPolicies {
public:
typedef DefaultPolicy1 P1;
typedef DefaultPolicy2 P2;
typedef DefaultPolicy3 P3;
typedef DefaultPolicy4 P4;
};
// class to define a usage of the default policy values
// - avoids ambiguities if we derive from DefaultPolicies more than once
class DefaultPolicyArgs : virtual public DefaultPolicies {
};
// class templates to override the default policy values
template <typename Policy>
class Policy1_is : virtual public DefaultPolicies {
public:
typedef Policy P1; // overriding typedef
};
template <typename Policy>
class Policy2_is : virtual public DefaultPolicies {
public:
typedef Policy P2; // overriding typedef
};
template <typename Policy>
class Policy3_is : virtual public DefaultPolicies {
public:
typedef Policy P3; // overriding typedef
};
template <typename Policy>
class Policy4_is : virtual public DefaultPolicies {
public:
typedef Policy P4; // overriding typedef
};
// create class template with four policies and default values
template <typename PolicySetter1 = DefaultPolicyArgs,
typename PolicySetter2 = DefaultPolicyArgs,
typename PolicySetter3 = DefaultPolicyArgs,
typename PolicySetter4 = DefaultPolicyArgs>
class BreadSlicer {
typedef PolicySelector<PolicySetter1, PolicySetter2,
PolicySetter3, PolicySetter4>
Policies;
// use Policies::P1, Policies::P2, //... to refer to the various policies.
public:
void print () {
Policies::P3::doPrint();
}
//...
};
// define a custom policy
class CustomPolicy {
public:
static void doPrint() {
std::cout << "CustomPolicy::doPrint()\n";
}
};
int main()
{
BreadSlicer<> bc1;
bc1.print();
BreadSlicer<Policy3_is<CustomPolicy> > bc2;
bc2.print();
}
没有合适的资源?快使用搜索试试~ 我知道了~
C++Template电子书及代码
共516个文件
cpp:271个
hpp:179个
makefile:24个
5星 · 超过95%的资源 需积分: 9 113 下载量 175 浏览量
2018-10-10
15:24:02
上传
评论 3
收藏 10.49MB RAR 举报
温馨提示
C++模版编程,C++Template书籍 + 代码资源,分享给大家一起学习学习
资源推荐
资源详情
资源评论
收起资源包目录
C++Template电子书及代码 (516个子文件)
namedtmpl.cpp 3KB
mapcmp.cpp 3KB
sort1.cpp 3KB
sort1.cpp 2KB
setcmp.cpp 2KB
sum1.cpp 2KB
setalgos.cpp 2KB
memfun1.cpp 2KB
set1.cpp 2KB
mmap1.cpp 2KB
types.cpp 2KB
genera2.cpp 2KB
string1.cpp 2KB
mset1.cpp 2KB
vector1.cpp 2KB
gslice1.cpp 2KB
countingptrtest.cpp 2KB
tracertest.cpp 2KB
nth1.cpp 2KB
list1.cpp 2KB
refsem1.cpp 2KB
map1.cpp 2KB
functorops.cpp 2KB
complex1.cpp 2KB
charset.cpp 2KB
staticpoly.cpp 2KB
inner1.cpp 2KB
transf2.cpp 2KB
indi1.cpp 2KB
rotate2.cpp 2KB
searchn1.cpp 2KB
slice1.cpp 2KB
misma1.cpp 2KB
fill1.cpp 2KB
loc2.cpp 2KB
numget.cpp 2KB
lexico1.cpp 2KB
search2.cpp 2KB
find1.cpp 2KB
sort2.cpp 2KB
replace2.cpp 2KB
mapfind.cpp 2KB
iter2.cpp 2KB
unique1.cpp 2KB
dynapoly.cpp 2KB
fo1.cpp 2KB
sum2.cpp 2KB
prime1.cpp 2KB
findof1.cpp 2KB
adjfind1.cpp 2KB
accu1.cpp 2KB
reviter3.cpp 2KB
add1.cpp 2KB
remove2.cpp 2KB
inserter.cpp 2KB
stack6test.cpp 2KB
stack8test.cpp 2KB
unique.cpp 2KB
val1.cpp 2KB
bounds1.cpp 2KB
psort2.cpp 2KB
algo1.cpp 2KB
remove2.cpp 2KB
copy1.cpp 2KB
psort1.cpp 2KB
perm1.cpp 2KB
find1.cpp 2KB
unique2.cpp 2KB
funcwrap.cpp 2KB
transf1.cpp 2KB
limits1.cpp 2KB
string2.cpp 1KB
accum8.cpp 1KB
equal1.cpp 1KB
foreach3.cpp 1KB
autoptr2.cpp 1KB
stack7test.cpp 1KB
itercat.cpp 1KB
findend1.cpp 1KB
copy3.cpp 1KB
iter3.cpp 1KB
random1.cpp 1KB
compose5.cpp 1KB
funcptr.cpp 1KB
max3.cpp 1KB
bitset1.cpp 1KB
search1.cpp 1KB
autoptr1.cpp 1KB
val2.cpp 1KB
deque1.cpp 1KB
unruh.cpp 1KB
tuple1.cpp 1KB
copy2.cpp 1KB
io1.cpp 1KB
rotate1.cpp 1KB
countlines.cpp 1KB
max2.cpp 1KB
count1.cpp 1KB
swap1.cpp 1KB
queue2.cpp 1KB
共 516 条
- 1
- 2
- 3
- 4
- 5
- 6
资源评论
- 海神8002019-11-11不错,好资源。
- lkllikailiang2018-12-19书写的不错,就是看了就忘了。纸质的也有不太方便。
wjgxajh
- 粉丝: 1
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功