using 模板的别名

来源:互联网 发布:阿里云域名需要备案吗 编辑:程序博客网 时间:2024/04/28 07:06
#include  "stdafx.h"
#include <iostream>
#include <type_traits>


using  namespace   std;
/*
 template (模板)是用来产生 template class (模板类型,是类型)。

在标准 C++,typedef 可定义类型的别名,但是不能够使用 typedef 来定义模板的别名。 

为了定义模板的别名,C++11 将会增加以下的语法:
using  别名=
*/




template< typename  T1, typename   T2,   int  a>
class A
{
public : 
A()
{
cout << typeid(T1).name() << "  " << typeid(T2).name() << "  " << a << endl;
}
 
};


/*
template< typename T2>
typedef    A< int , second, 111>   A0; // 在C++是不合法的
*/


template< typename T2>
using   A1 = A< float,  T2,  111>;




template<int c  >
using   A2 = A< float,  char , c>;


//  using 也能在 C++11 中定义一般类型的别名,等同 typedef:


typedef    int     INT1;// 傳統語法
using     INT2 = int;// 新增語法


typedef void(*pFun1)(double);    // 傳統語法
using  pFun2 = void(*)(double);  // 新增語法






void   fun( double d )
{
cout << d << endl;
}




int main() 
{
A1<int>  a1;


A2<222>  a2;


INT2   c = 1000;
cout << c << endl;
 
pFun2  f =  fun;   //或者pFun2  f = &fun
f(12.3456);
 
}