c++ 语言技巧之traits

Traits技术在C++中是一种常见的语言技巧,常用于STL中解耦容器和算法。本文介绍了Traits的入门,包括形参型别推导、返回值型别推导和偏特化,并展示了如何通过Traits抽取对象类型,实现统一的接口处理。

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

Traits

Traits技术是STL中比较常见的一种C++语言技巧表达方式之一,通过C++模板的能力,将对象类型萃取出来,让同一个接口实现对应的功能。特别是在算法和容器中,可以解耦出具体的对象类型,使得两者通过迭代器实现链接。

Traits技巧之入门

C++中通过使用迭代器,将STL中的容器和算法相解耦,在C++中编译器编译器需要考虑相应的型别判断。

形参型别推导

首先我们通过模板获取形参的数据类型

// 通过class 自动推导iter类型和*iter类型
template<class T>
void func(I iter) {
   
	func_tmpl(iter, *iter);
}

template<class I, class T>
void func_tmpl(I iter, T t){
   
	T tmp;
}

int main(){
   
 int i;
 func(&i);
}

对于形参类型的类型推导,这是最简单的方式

返回值型别推导

但是模板参数不能简单地通过类型返回

template<class T>
(*T) func(T t){
   
	T tmp;
}

这样会编译失败,对于返回值的型别推导,STL的做法是在内部声明的迭代器中,构造一个类型,通过模板推导出返回类型

template<class T>
struct Iter_traits{
   
	typedef T value_type;
	T* ptr;
	Iter_traits(T* p =</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值