c++ template笔记
Posted skyman_2001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ template笔记相关的知识,希望对你有一定的参考价值。
1. 数组
template <typename T, int N>
void array_print(T (&arr)[N])
for(int i = 0; i < N; ++i)
cout << arr[i] << endl;
int arr[5] = 1, 2, 3, 4, 5;
array_print(arr); //实例成 array_print(int(&)[5])
2. 返回值
template <class T1, class T2, class T3>
T1 sum(T2 x, T3 y)
return x.size() + y.size();
size_t l = sum<size_t>(string("xx"), string("yyy"));
3. 非类型形参数
template<int w, int h>
int area()
return w * h;
int a = area<8,6>();
4. 特化
template <typename T>
int compare(const T &v1, const T &v2)
if(v1 < v2) return -1;
if(v2 < v1) return 1;
return 0;
template <>
int compare<const char*>(const char* const &v1, const char* const &v2)
return strcmp(v1, v2);
const char *str1 = "hello", *str2 = "world";
int n1 = 1, n2 = 2;
compare(str1, str2);
compare(n1, n2);
5. 缺省模板参数
template <typename T1, typename T2 = bool>
class A
public:
A() : m_value1(), m_value2()
~A()
private:
T1 m_value1;
T2 m_value2;
;
A<int> aa;
6. traits
template <typename T>
class TypeTraits;
template <>
class TypeTraits<char>
public:
typedef int ReturnType;
;
template <>
class TypeTraits<short>
public:
typedef int ReturnType;
;
template <>
class TypeTraits<int>
public:
typedef int ReturnType;
;
template <>
class TypeTraits<float>
public:
typedef double ReturnType;
;
template <typename T,typename Traits>
typename Traits::ReturnType average(T const* begin, T const* end)
typedef typename Traits::ReturnType ReturnType;
ReturnType total = ReturnType();
int count = 0;
while (begin != end)
total += * begin;
++begin;
++count;
return total / count;
char str[] = "i love you";
cout << average<char,TypeTraits<char> >(&str[0],&str[10]) << endl; // 看class TypeTraits<char>
参考文献:
1. <<C++ Primer>>
2. http://www.cnblogs.com/stephen-liu74/archive/2012/09/12/2639736.html
3. http://www.cppblog.com/youxia/archive/2008/08/30/60443.html
以上是关于c++ template笔记的主要内容,如果未能解决你的问题,请参考以下文章
C++设计模式学习笔记:模式分类与模版方法 Template Method