STL提取参数模版的类型

一、解决的问题

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值