c++ template笔记
2013-12-17 16:38
225 查看
1. 数组
2. 返回值
3. 非类型形参数
4. 特化
5.
缺省模板参数
6. traits
参考文献:
1. <<C++ Primer>>
2. /article/4700395.html
3. http://www.cppblog.com/youxia/archive/2008/08/30/60443.html
template <typename T, int N> void array_print(T (&arr) ) { 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. /article/4700395.html
3. http://www.cppblog.com/youxia/archive/2008/08/30/60443.html
相关文章推荐
- 面向对象程序设计-C++ Stream & Template & Exception【第十五次上课笔记】
- C++ TEMPLATE 学习笔记
- 算法笔记:C++ STL(Standard Template Library)二(未完待续)
- C++ TEMPLATE 学习笔记
- <C++学习笔记>函数模板 template
- C++学习笔记36 (模板的细节明确template specialization)和显式实例(template instantiation)
- 练习笔记 C++Template
- C++ template笔记若干
- 算法笔记:C++ STL(Standard Template Library)
- c++ template笔记(3)非类型模板参数nontype template parameters
- C++ TEMPLATE 学习笔记
- c++ template笔记(1)模板函数
- C++ template学习笔记之禁止进行自动类型转换
- c++ template笔记(3)非类型模板参数nontype template parameters
- 《C++ Template. The Complete Guide》笔记之一 缘起
- C++ template学习笔记之模板特化
- c++ template笔记(2)模板类
- c++ template笔记(1)模板函数
- C++ template学习笔记之杂七杂八
- C++ template 学习笔记