文档章节

C++ 模板使用总结

invictus_lee
 invictus_lee
发布于 2014/04/16 11:08
字数 419
阅读 221
收藏 0

1. C++模板类静态成员

template < typename T> struct testClass   
{   
  static int _data;   
};   
template< > int testClass< char>::_data = 1;   
template< > int testClass< long>::_data = 2;   
int main( void ) {   
cout < <  boolalpha < <  (1==testClass< char>::_data) < <  endl;   
cout < <  boolalpha < <  (2==testClass< long>::_data) < <  endl;   
}

2. C++模板类偏特化

template < class I, class O> struct testClass   
{   
testClass() { cout < <  "I, O" < <  endl; }   
};   
template < class T> struct testClass< T*, T*>   
{   
testClass() { cout < <  "T*, T*" < <  endl; }   
};   
template < class T> struct testClass< const T*, T*>   
{   
testClass() { cout < <  "const T*, T*" < <  endl; }   
};   
int main( void )   
{   
testClass< int, char> obj1;   
testClass< int*, int*> obj2;   
testClass< const int*, int*> obj3;

3.类模版+函数模版

template < class T> struct testClass   
{   
void swap( testClass< T>& ) { cout < <  "swap()" < <  endl; }   
};   
template < class T> inline void swap( testClass< T>& x, 
testClass< T>& y )   
{   
x.swap( y );   
}   
int main( void )  
{   
testClass< int> obj1;   
testClass< int> obj2;   
swap( obj1, obj2 );   
}

4. 类成员函数模板

struct testClass  
{   
template < class T> void mfun( const T& t )  
{   
cout < <  t < <  endl;   
}   
template < class T> operator T()   
{   
return T();   
}   
};   
int main( void )   
{   
testClass obj;   
obj.mfun( 1 );   
int i = obj;   
cout < <  i < <  endl;   
}

5. 缺省C++模板参数推导

template < class T> struct test   
{   
T a;   
};   
template < class I, class O=test< I> > struct testClass   
{   
I b;   
O c;   
};   
void main()  
{  
}

6. 非类型C++模板参数

template < class T, int n> struct testClass {   
T _t;   
testClass() : _t(n) {   
}   
};   
int main( void ) {   
testClass< int,1> obj1;   
testClass< int,2> obj2;   
}

7. 空模板参数


  1. template < class T> struct testClass;  
    template < class T> bool operator==( const testClass< T>&,
    const testClass< T>& )  
    {  
    return false;  
    };  
    template < class T> struct testClass  
    {  
    friend bool operator== < >
    ( const testClass&, const testClass& );  
    };  
    void main()  
    {  
    }

8. template template 类

struct Widget1   
{   
template< typename T>   
T foo(){}   
};   
template< template< class T>class X>   
struct Widget2  
{   
};   
void main()  
{  
cout< <  3 < <  '\n';  
}
/**
it is a non-type parameter. You can have several kinds of template parameters
Type Parameters:
Types
Templates (only classes, no functions)
Non-type Parameters:
Pointers
References
Integral constant expressions
**/
#include <iostream>
using namespace std;

template <int SIZE>
void f(const int (&array)[SIZE])
{
   cout << sizeof(array) << endl;
}

int main()
{
   int array[5] = {3,4,9,1,5};
   cout << sizeof(array) << endl;
   f(array);
   return 0;
}
///////////////////////////////////////////////////////
    template <int N>struct Factorial {
    enum { value = N * Factorial<N - 1>::value };
    };
    template <>struct Factorial<0> {
    enum { value = 1 };
    };
    int x = Factorial<4>::value; // == 24
    int y = Factorial<0>::value; // == 1}







本文转载自:http://developer.51cto.com/art/201002/182202.htm

invictus_lee
粉丝 1
博文 141
码字总数 21423
作品 2
徐汇
程序员
私信 提问
关于C++和Objective-C混编

Objective-C在大部分情况下足够满足我们的需求,但是还是会有一些情况必须要使用C++,比如: 使用C++的库 当Objective-C不够快的时候 第一点自然不必多说,至于第二点,Objective-C的消息机制...

JohnZr
2012/08/19
50
0
C++ 书籍大汇

C++ 书籍大汇 C++ 书籍大汇 语言基础入门: 1. C++ Primer 《C++入门》(通常不用中文名) by Stanley B. Lippman 有第三版和第四版,如其名,是C++入门的不二选择,是全面广泛的参考书目,内...

长平狐
2012/09/20
285
0
C++ 模板惯用法

原文:C++ 模板惯用法 作者:Breaker 关于 C++ 模板编程的惯用法,note-to-self + keynote + idiom case + cross-reference 式笔记 目录 模板语法 模板惯用法示例 堆栈上分配 编译优化的开关...

晨曦之光
2012/05/23
1K
0
C++17 标准正式发布:开发者可更简单地编写和维护代码

昨日,ISO C++ 委员会正式发布了 C++ 17 标准,正式名称为 ISO/IEC 14882:2017。 基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以...

局长
2017/12/06
9.4K
43
C++中的 .h 和 .cpp 区别详解

在C++编程过程中,随着项目的越来越大,代码也会越来越多,并且难以管理和分析。于是,在C++中就要分出了头(.h)文件和实现(.cpp)文件,并且也有了Package的概念。 对于以C起步,C#作为“母语...

刘小米_思聪
2014/09/18
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

skywalking(容器部署)

skywalking(容器部署) 标签(空格分隔): APM [toc] 1. Elasticsearch SkywalkingElasticsearch 5.X(部分功能报错、拓扑图不显示) Skywalking需要Elasticsearch 6.X docker network create......

JUKE
18分钟前
4
0
解决Unable to find a single main class from the following candidates [xxx,xxx]

一、问题描述 1.1 开发环境配置 pom.xml <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--一定要对上springboot版本号,因......

TeddyIH
18分钟前
4
0
Dubbo服务限制大数据传输抛Data length too large: 13055248, max payload: 8388608解决方案

当dubbo服务提供者向消费层传输大数据容量数据时,会受到Dubbo的限制,报类似如下异常: 2019-08-23 11:04:31.711 [ DubboServerHandler-XX.XX.XX.XXX:20880-thread-87] - [ ERROR ] [com.al...

huangkejie
21分钟前
4
0
HashMap和ConcurrentHashMap的区别

为了线程安全,ConcurrentHashMap 引入了一个 “分段锁” 的概念。具体可以理解把一个大的 map 拆分成 N 个小的 Map 。最后再根据 key.hashcode( )来决定放到哪一个 hashmap 中去。 hashmap ...

Garphy
22分钟前
3
0
购买SSL证书需要注意哪些问题

为了保障网站的基本安全,为网站部署SSL证书,已经是一种常态了。各大浏览器对于安装了SSL证书的网站会更友好,并且不会发出“不安全”的提示。部署SSL证书之前首先得去给网站购买一个SSL证书...

安信证书
52分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部