c++参数类型的识别(STL)
来源:互联网 发布:淘宝众筹logo 编辑:程序博客网 时间:2024/06/06 05:43
template<typename I,typename T>void func_impl(I iter,T t) //(int*,int){ T tmp; //这里解决了问题。T就是迭代器所指之物的型别,本例为int .............//}template<typename I>inline func(I iter) //(int*){ func_impl(iter,*iter);}int main(){ int i; func(&i); return 0;}
我们一func为对外接口,却把实际操作放在func_impl里面。由于func_impl是一个function template,一旦被调用,编译器自动进行template参数推导。于是判别出T。
在STL源代码中,主要是使用c++中的偏特化,来进行型别识别的。
template<typename T>
struct iterator_traits{
typedef typename T::value_type value_type
};
这个所谓的traits,其意思就是,如果T定义有自己的类型value_type,那么通过这个traits的作用,萃取出来的value_type就是T::value_type。也就是说,如果T定义了自己的value_type,先前的那个func函数可以改写为这样:
template<typename T>
typename iterator_traits<T>::value_type //这一行就是该函数的返回类型
inline func(T iter) //(int *)
{
return *iter;
}
int main()
{
int i;
func(&i);
}
一下是指针版本和const指针版本:
特化版本的traits:(mutable 指针版本)
template<typename T>
struct traits<T*>{
typedef T value_type;
}
(const指针版本):
template<typename T>
struct traits<const T*>{
typedef T value_type;
}
- c++参数类型的识别(STL)
- STL提取参数模版的类型
- STL: unordered_map 自定义键值类型的使用(C++)
- C++ STL string类型
- 关于STL中几个比较费解的参数类型
- 参数类型不同的函数重载(C++)
- c#-泛型-类型参数的约束
- C语言main函数的参数类型
- C 语言的可变参数类型 stdarg
- C语音switch参数的类型问题
- C/C++函数参数的类型
- C语言的参数传递类型
- OC学习笔记(11)Object-C静态类型识别与动态类型识别
- C++:关于C++的RTTI (运行阶段类型识别)
- C语言命令行参数识别
- 【C++】字符串和数值类型的相互转化(借助STL)
- 【C++】switch参数类型
- C#:params类型参数
- 如何有效率地使用时间
- jdbc事物处理
- C++ 虚函数 派生类的调用
- 刚刚写了一个关于java中抽象类和接口的示例
- avi文件分析
- c++参数类型的识别(STL)
- 深入理解C语言——来自酷壳
- 正则表达式
- 简介如何查看执行计划以及执行计划的准确性
- I/O模式及SOCKET编程中的阻塞/非阻塞模式
- 网站目录是提升网站权重的好方法
- wince6下usb摄像头(UVC)使用指南
- NYOJ 150 Train Problem I 【栈】
- SLAM