您的位置:首页 > 其它

STL提取参数模版的类型

2016-07-02 09:46 351 查看
一、解决的问题

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之后,这个时候就告诉编译器是一个类型,这个时候就可以顺利的同过编译了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  STL