C++11新特性从using化名模板到模板模板参数

新特性化名模板

template <typename T>
using Vec = std::vector<T,MyAlloc<T>>;  //其中MyAlloc是自定义的迭代器。
//然后以后声明变量就这样写
Vec<int> coll;
//下面的写法等价于上一面的
std::vector<int,MyAlloc<int>> coll;

平时我们声明一个vector是这样的

vector<int> vec;//没有特意指定构造器,那是因为有默认值

那么使用#define和typedef会是怎么样的呢?
#define

#define Vec<T> template<typename T> std::vector<T, MyAlloc<T>>;

//你会这样定义变量
Vec<int> coll;
//因为#define是字符替代,所以推出下面的样子
//这多了前面的一些,并不是我们想要的
template<typename int> std::vector<int, MyAlloc<int>>;

至于typedef呢?
使用typedef也无法到达于using相同的效果,因为typedef是不接受参数的。

typedef std::vector<int,MyAlloc<int>> Vec;//我们最多写成这个样子了

注意:不能部分或专门化别名。写法是固定的必须带可变类型参数

然后看到这里你是不是以为,难道只是为了少打几个字就搞这样的一个新特性?
那当然不是啦!,请继续往下看

模板模板参数

有没有tmplate语法能够在模板接受一个template参数Container时,当Container本身又是个class template,能取出Container的template参数?

#include <iostream>
#include <vector>
#include <list>
#include <deque>

using namespace std;

#define SIZE 1024
template<typename T, template<class> class Container>
class XCls
{
private:
    Container<T> c;
public:
    XCls()
    {
        for(auto a:SIZE)
            c.insert(c.end(),T());
        output_static_data(T());
        Container<T>c1(c);
        Container<T>c2(std::move(c));
        c1.swap(c2);
    }
};
//这部分不得在函数体内声明
template<typename T>
using Vec = vector<T,allocator<T>>;

template<typename T>
using Lst = list<T,allocator<T>>;

template<typename T>
using Que = Queue<T,allocator<T>>;

int main()
{
    XCls<MyString,Vec> c1;
    XCls<MyStrNoMove,Vec> c2;
    
    XCls<MyString,Lst> c1;
    XCls<MyStrNoMove,Lst> c2;
    
    XCls<MyString,Que> c1;
    XCls<MyStrNoMove,Que> c2;
    
}

using的三大用法

1.指明对该命名空间的使用和对名字空间成员使用声明

using namespace std;
using std::cout;

2.为类成员using声明
在这里插入图片描述
3.变量类型别名和别名模板(C++11新加的using特性)
类型别名

using func = void(*)(int,int)  //func是一个函数指针
typedef void(*func)(int,int);  //和上面一样的意思

template<typename T>
struct Contaniner
{
    using Value_type = T; //类型别名
}


模板

template<class CharT>
using mystring = std::basic_string<CharT,std::char_traits<CharT>>

字体的颜色和大小

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

困了就喝白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值