STL提取参数模版的类型

来源:互联网 发布:章鱼彩票 知乎 编辑:程序博客网 时间:2024/05/18 11:01

一、解决的问题

1、其实是可以推导出函数的返回值类型的:

但是是无法在模版类的外面进行使用的

下面的两种情况是编译通过的:

(1)

template<class T>T Print(T x){return x;}

(2)

template<class T>struct A{T Print(T value){return value;}};

2、解决T无法在类模版的外面进行使用的问题

例如:

函数定义:

template<class T>struct B{B(T x):_a(x){}typedef T ValueType;T& operator*(){return _a;}T _a;};template<class T>typename T::ValueType Fun1(T value){return *value;}
测试用例:

void Test(){B<int> b1(10);cout<<Fun1(b1);}

3、总结

定义了一个模版的函数,这个时候你传入的参数又是一个模版,这个时候怎么使用这个参数模版中的对应的类型,这个时候就可以使用,这个技术:

在参数模版的里面定义一个typededf T ValueType(一定要定义为public的为什么,自己思考),这个时候就可以使用 typename T::ValueType的方式拿到对应的类型,

为什么要加typename,这是因为编译器不知道这个ValueType到底是变量,还是对应的类型,加上typename之后,这个时候就告诉编译器是一个类型,这个时候就可以顺利的同过编译了

0 0
原创粉丝点击