C++ typename的使用方式

本文深入解析了C++泛型编程中typename和class关键字的使用区别,通过具体代码实例展示了如何在模板中正确使用这两个关键字,特别是当涉及到依赖模板类型的复杂场景时。

基本用法

对于泛型模板的声明,typenameclass的作用一样,都是为了说明模板类型。

template <typename T, class C>
void fun(T t, C c);  // 这里的T和C是等价的

与class的区别

https://stackoverflow.com/questions/2023977/difference-of-keywords-typename-and-class-in-templates

需要使用的类型需要依靠泛型模板的时候,此时需要typename进行显式说明。

代码实例:

template <class F>
void fun(F f) {
	using return_type = typename std::result_of<F()>::type;
	/*
	''''''
	*/
}

上述的函数是一个泛型的函数模板,如果需要使用到F的返回类型,就要靠上面这种说明方式。一个更具体的例子,在C++11的多线程中,如果使用std::future,那么泛型的效果更加明显。

template <class F>
auto getRes() -> std::future<typename std::result_of<F()>::type>
{
// 这个函数返回一个泛型的std::future类型,但是该类型依赖于泛型函数F的返回值,所以使用typename的方式
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值