开篇就来了一个示例代码,整个这个小节就围绕这个示例代码来描述模板化基类内的名称(函数)。主要是因为C++知道base class templates有可能被特化,而那个特化版本肯呢个不提供和一般性template相同的接口。因此它往往拒绝在templatized base classes(模板化.....
分类:
编程语言 时间:
2015-04-12 11:59:23
阅读次数:
135
2 用于判断类型的traits类is_void类可以判断模板参数的类型,使用很简单,注意,也可以直接使用::value。cout ::type::value << endl;
cout ::type::value << endl;
但是实现很有趣,特化居然可以用来继承不同的类。这里没有去找clang++实现代码,用boost代码代替吧。template
struct is_void : publ...
分类:
编程语言 时间:
2015-04-06 23:21:06
阅读次数:
293
1 integral_constant类这个类是所有traits类的基类,分别提供了以下功能:value_type 表示值的类型value表示值type 表示自己, 因此可以用::type::value来获取值true_type和false_type两个特化类用来表示bool值类型的traits,很多traits类都需要继承它们下面的代码分别来自C++11和Boost,略有差别:C++11包含va...
分类:
编程语言 时间:
2015-04-06 18:45:19
阅读次数:
298
2.4 switch/case 替代现在模拟switch/case语句,不过也是在编译期运行。先看调用代码和输出结果// test case
cout << "test case" << endl;
Case::Run();
test case
case 2
实现代码很简单,还是模板特化template
class Case {
public:
static inline void Run()...
分类:
编程语言 时间:
2015-04-05 22:02:23
阅读次数:
223
2.3 if 替代将if语句放在编译期执行,可以用模板特化的方式实现。下面是调用代码:// test if
cout << "test if" << endl;
If::Run();
输出结果为:test if
it's false
模板类的实现如下:template
class If {
public:
static inline void Run() {
cout << "it's...
分类:
编程语言 时间:
2015-04-05 17:31:41
阅读次数:
133
当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常。如果你提供一个member swap,也该提供一个non-member swap用来调用前者。对于class(而非templates),也请特化std::swap。调用swap时应针对std::swap使用...
分类:
编程语言 时间:
2015-03-11 19:33:57
阅读次数:
161
1. 非类型模板形参是指模板的形参是基本类型比如int,如template array_init(T (¶m[N))2. 模板特化是指为特定的类型重现实现,针对的是模板不能满足所有情况的一种补充3. 模板的traits就是具有这种功能的模板类:从模板形参中拿到需要的type,比如说itera...
分类:
其他好文 时间:
2015-03-10 18:43:31
阅读次数:
140
不论是泛型思维或STL的实际运用,迭代器(iterators)都扮演者重要的角色。迭代器的中心思想在于:将数据容器(container)和算法分开,彼此独立设计,最后再以迭代器这种工具将两者粘合起来。 一.模板特化与偏特化 假设下面有一个class template如下:templateclas.....
分类:
其他好文 时间:
2015-03-06 20:44:48
阅读次数:
173
范例:// 主模板templatestruct Fib{ enum { Result = Fib::Result + Fib::Result };};// 完全特化版template struct Fib{ enum { Result = 1 };};// 完全特化版template s...
分类:
编程语言 时间:
2015-02-27 13:27:26
阅读次数:
154