template class 随笔

template class可以节省大量的时间,其在预编译期间生成具体代码的特性(元编程)给c++带来极大便利与乐趣。

本篇介绍本人用到的c++ template实践代码,均为片段。


1.使用已有的template class 但用不同的名字

使用template class 很简单,但有时已有的template class的命名空间名字长,而且可能有好几个前缀命名空间,如namespaceA::namespaceA1::classA,码字太辛苦了,怎么能简单点呢?

#include<vector> // 以vector为例

template<typename T>
using vector2 = std::vector<T>; // c++11的aliases template特性,vs2013(windows), gcc4.4(linux), clang3.0(Mac)起支持

2.使用template class 的内部定义的成员

听起来有点抽象,仍以vector为例。

void printf(std::vector<int> v) // 以int 实例化vector,这个大家都比较熟悉
{
    for(std::vector<int>::iterator it = v.begin(); it!= v.end() ; it++)
        cout<<*it;
}
但如果还是任意类型呢?如下处理

template<typename T>
void printf(std::vector<T> v) //定义template函数 
{
    for(typename std::vector<T>::iterator it = v.begin(); it!= v.end() ; it++)
        cout<<*it;
}

3.嵌套使用template

写模板类时会遇到情况,需要一个模板类嵌套另一个使用。这种情况的难点在于如何让c++编译器识别其中一个类是模板类。例子如下:

//类的情况,函数类似。 clang-5.0.3(Mac)通过,
template<template<typename>class Array, typename T> // 这里的Array之前必须是class,c++标准里规定,模板声明的话template后必须接class
class Sample
{
    typedef Array<T> DataArray;
    DataArray _array;
}



你可能感兴趣的:(C++,template)