STL提取参数模版的类型

本文探讨了C++模板元编程中如何在模板外部使用模板参数类型的方法。通过定义一个公共的typedef来引用模板参数类型,并利用typename关键字正确地指定类型,从而能够在模板外部访问到模板内部的类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、解决的问题

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之后,这个时候就告诉编译器是一个类型,这个时候就可以顺利的同过编译了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值