[C++11 模板的改进]

Posted Overboom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[C++11 模板的改进]相关的知识,希望对你有一定的参考价值。

1 右尖括号改进

看一段示例代码:

#include <iostream>
using namespace std;

template<int i> class X ;
template<class T> class Y ;

int main()

    Y<X<10>> obj1; //C++11之前,2个右尖括号之间必须有空格


    return 0;

2 函数模板的默认模板参数

C++11之前,类模板支持默认模板参数,但是不支持函数模板的默认模板参数。

// 1. 普通函数带默认参数,c++98编译通过, c++11编译通过
viod xxfun(int num = 3)

// 2. 类模板支持默认模板参数,c++98编译通过, c++11编译通过
template <template T = int>
class XXXClass;

// 3. 函数模板的默认模板参数,c++98编译失败, c++11编译通过
template<template T = int>
void XXXfunc() ;

类模板的默认模板参数必须是从右往左定义,函数模板的默认模板参数则没有这个限定:

template<class T1, class T2 = int> 
class XXXclass;
template<class T1 = int, class T2> 
class XXXclass;				//无法通过编译

template<class T1 = int, class T2>
void XXXfunc(T1 a, T2 b);
template<int i = 0, class T>
void XXXfunc(T, a);

以上是关于[C++11 模板的改进]的主要内容,如果未能解决你的问题,请参考以下文章

C++11新特性:6—— C++11对模板实例化中连续右尖括号>>的改进

[C++11 模板的改进]

第4课 模板的细节改进

C11简洁之道:模板改进

[C++11]对模板右尖括号的优化

[C++11 模板的改进] --- 可变参数模板